Private Sub Command20_Click() Dim i&, j&, m&, ts$(2) 
Dim tn(2) As Integer ts(0) = "01234" 
ts(1) = "56789" 
ts(2) = "" 
For i = List1.ListCount - 1 To 0 Step -1 
If Form3.Check1.Value = 1 Then 
tn(0) = 3 
tn(1) = 0 
tn(2) = 0 
c1 ts(), tn(), i 
End If 
If Form3.Check2.Value = 1 Then 
tn(0) = 2 
tn(1) = 1 
tn(2) = 0 
c1 ts(), tn(), i 
End If 
If Form3.Check3.Value = 1 Then 
tn(0) = 0 
tn(1) = 3 
tn(2) = 0 
c1 ts(), tn(), i 
End If 
If Form3.Check4.Value = 1 Then 
tn(0) = 1 
tn(1) = 2 
tn(2) = 0 
c1 ts(), tn(), i 
End If Next 
End Sub Sub c1(ts1() As String, tn1() As Integer, i1&) 
Dim n() As Byte 
n = StrConv(List1.List(i1), 128) For j = 0 To 2 
For m = 0 To 2 
If InStr(ts1(m), Chr(n(j))) > 0 Then tn1(m) = tn1(m) - 1 
Next 
Next 
If tn1(0) = 0 And tn1(1) = 0 And tn1(2) = 0 Then Else List1.RemoveItem i1 End Sub 
这段代码单独选一个复选好使,多选出现下标越界在这里i1,这该怎么改呀,这个代码都改将近10天了,还没有成功

解决方案 »

  1.   

    i1???是1还是i1.... 你先把这个交代清楚... 这个i1哪儿冒出来的啊
      

  2.   

    返回按指定类型转换的 Variant (String)。
    语法
    StrConv(string, conversion, LCID)
    StrConv 函数的语法有下面的命名参数:
    部分 说明 
    string 必要参数。要转换的字符串表达式。 
    conversion 必要参数。Integer。其值的和决定转换的类型。 
    LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。) 设置值
    conversion 参数的设置值为:
    常数 值 说明 
    vbUpperCase 1 将字符串文字转成大写。 
    vbLowerCase 2 将字符串文字转成小写。 
    vbProperCase 3 将字符串中每个字的开头字母转成大写。 
    vbWide* 4* 将字符串中单字节字符转成双字节字符。 
    vbNarrow* 8* 将字符串中双字节字符转成单字节字符。 
    vbKatakana** 16** 将字符串中平假名字符转成片假名字符。 
    vbHiragana** 32** 将字符串中片假名字符转成平假名字符。 
    vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。 
    vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。  
    *应用到远东国别。
    **仅应用到日本。
    注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
    下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。
    说明
    在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。
      

  3.   

    Sub c1(ts1() As String, tn1() As Integer, i1&)变量未定义???
      

  4.   

    If InStr(ts1(m), Chr(n(j))) > 0 Then
      

  5.   

    Sub c1(ts1() As String, tn1() As Integer, i1&)变量未定义???
    这句是不是要放到上面的代码里呀,Sub c1(ts1() As String, tn1() As Integer, i1&),ts1()这个在括号里一赋值就告诉少右括号
      

  6.   

    我的源代码是这个,上面的也是一个老师帮忙改的,但是没通过,我也糊涂了,还请老师照着个源代码改一下吧,这段代码单独选一个复选好使,多选就不好使了
    Private Sub Command20_Click() Dim i&, j&, m&, ts$(2), n() As Byte 
    Dim tn(2) As String ts(0) = "01234" 
    ts(1) = "56789" 
    ts(2) = "" 
    For i = List1.ListCount - 1 To 0 Step -1 
    If Form3.Check1.Value = 1 Then 
    tn(0) = 3 
    tn(1) = 0 
    tn(2) = 0 End If 
    If Form3.Check2.Value = 1 Then 
    tn(0) = 2 
    tn(1) = 1 
    tn(2) = 0 
    End If 
    If Form3.Check3.Value = 1 Then 
    tn(0) = 0 
    tn(1) = 3 
    tn(2) = 0 
    End If 
    If Form3.Check4.Value = 1 Then 
    tn(0) = 1 
    tn(1) = 2 
    tn(2) = 0 
    End If n = StrConv(List1.List(i), 128) For j = 0 To 2 
    For m = 0 To 2 
    If InStr(ts(m), Chr(n(j))) > 0 Then tn(m) = tn(m) - 1 
    Next 
    Next 
    If tn(0) = 0 And tn(1) = 0 And tn(2) = 0 Then Else List1.RemoveItem i Next 
    End Sub 
      

  7.   

    If tn1(0) = 0 And tn1(1) = 0 And tn1(2) = 0 Then Else Form3.List1.RemoveItem (i1)
    而你的COMMAND20.CLICK里又
    CL TS(),TN(),I如果列表里根本就什么都没了... 你要删除什么呢... 看样子你就是想点个CHECKED就删除一项...可是有必要搞这么麻烦吗???
      

  8.   

    按照你的这个东西... 你的列表框里都是固定的你想删哪个就能删除那个,至于用这种循环大法来把我的头都搞晕么根本不用循环    就在各个CHECKED里写如
    Private Sub Check1_Click()
      If Check1.Value = 1 Then
        List1.Clear
        List1.AddItem ("1")
        List1.AddItem ("2")
        List1.AddItem ("3")
      End If
    End Sub还有如果要检测其他的,就直接在各CHECK里加个判断就行了...
    这么少的列表项还搞这么复杂的东西来统一判断...
    你的精力貌似很旺盛啊
      

  9.   

    用文字表达一下 如果 我从0数到第100个苹果 
              如果苹果被咬了 我就记录被咬的苹果数字 
          如果被咬的苹果数字大于1个那么 
              我就把所有被咬的苹果挑出来,把每个被咬的苹果上的牙齿印的特征在黑板上记下来 
          如果只有被咬的苹果数只有1个那么我首先把黑板擦干净 
              按照原来设计好的 
                  如果是第1个 
                      那么 
                  如果是第2个 
                      那么 
                  XXXXXXXXX 好了,这个思路就可以解决你的问题... 
    能不用麻烦的就不用麻烦的...你用数组实在是太麻烦了... 
           
     
    修改 删除 举报 引用 回复   
     
     加为好友 
    发送私信 
    在线聊天
     bob008 
    冻冬 
    等级: 
    可用分等级:富农 
    总技术专家分:2356 
    总技术专家分排名:9075  发表于:2008-09-07 13:20:449楼 得分:0 
    算了.好人做到底,给你写个例子 
    Option Explicit 
    Private Sub chk(index As Integer)  '自己定义 如果一堆苹果,只咬了第1个怎么写,只咬了第2个怎么写,等等 
    Select Case index 
    Case 0: 
      If Check1(0).Value = 1 Then      '如果被咬了 
      List1.AddItem ("123456") 
      List1.AddItem ("223456") 
      End If 
    Case 1: 
      If Check1(1).Value = 1 Then 
      List1.AddItem ("123456") 
      List1.AddItem ("223456") 
      End If 
    Case 2: 
      If Check1(2).Value = 1 Then 
      List1.AddItem ("123456") 
      List1.AddItem ("223456") 
      End If 
    Case 3: 
      If Check1(3).Value = 1 Then 
      List1.AddItem ("123456") 
      List1.AddItem ("223456") 
      End If 
      End Select 
    End Sub 
    Private Sub Command1_Click() 
      Dim i As Integer 
      Dim j As Integer 
      
        List1.Clear                    '擦黑板---不过这控件是白板,反正差不多了 
        
        j = 0                          '先赋初始值 
        
        For i = 0 To 3                '先检查一下苹果被咬了多少个 
          If Check1(i).Value = 1 Then 
          j = j + 1 
          End If 
        Next 
        
        If j > 1 Then                  '如果被咬了1个以上 
        
          For i = 0 To 3 
            If Check1(i).Value = 1 Then 
              chk (i)                  '那就按上面定的第1个咬了怎么办,第2个咬了怎么办的记录 
          End If 
        Next                            '如果只有1个,甚至一个都没咬 
        Else 
          List1.Clear                  '还是先搽黑板 
          For i = 0 To 3 
            If Check1(i).Value = 1 Then '还是按上面定的第1个咬了怎么办,第2个咬了怎么办的记录. 
              chk (i) 
          End If 
          Next 
        End If 
          
    End Sub