‘在前一个窗体中输入一个数字在2~20之间,name是InputNumber,根据这个数字决定后一个窗体中textbox控件的行数。已经预先放好了20行2列的textbox,如果输入16,则隐藏后四行,也就是textbox17~20,37~40.
但是写了下面的的代码,却不能实现隐藏的功能,求大神搭救,看怎么改啊!
Public Sub InputCoord()
    '根据上一个对话框输入的组数InputNumber,画表格,隐藏多余表格
    Dim i As Integer
    Dim k As Integer
    k = 20 - InputNumber
    For i = 0 To k
        If i < k Then
            Set m = 20 - i
            Set n = 40 - i
            TextBoxm.Visible = False
            TextBoxn.Visible = False
            Labelm.Visible = False
        End If
    Next i
    
    '调整整个窗体长度
    InputNumber3.Height = 435 - 18 * k
    '调整"返回"按钮位置
    BackButton3.Top = 378 - 18 * k
    '调整"清空"按钮位置
    ClearButton3.Top = 342 - 18 * k
    '调整清空按钮位置
    ComButton3.Top = 306 - 18 * k
End Sub
'点击返回按钮
Private Sub BackButton3_Click()
    InputNumber3.Hide
    IfYes2.Show
End Sub'点击清空按钮,弹出 ClearYes4 对话框询问是否清空
Private Sub ClearButton3_Click()
    ClearYes4.Show
End Sub'点击确认按钮
Private Sub ComButton3_Click()
 '遇到有未填写的表格,报错
    For i = 1 To InputNumber
        If (Me.Controls(("textbox" & i)) = "" Or Me.Controls(("textbox" & 20 + i)) = "") Then
            MsgBox "No empty entries allowed!"
        End If
    Next i
    '弹出 温馨提示 CommandYes4 对话框,确认数据是否有误
    CommandYes4.Show
End Sub

解决方案 »

  1.   

     For i = 0 To k
            If i < k Then
                Set m = 20 - i
                Set n = 40 - i
                TextBoxm.Visible = False
                TextBoxn.Visible = False
                Labelm.Visible = False以上代码不报错吗?暂且不论功能上用textbox实现是否妥当,如果想隐藏的话,一般用for each循环form上的controls,如果找到匹
    配项就隐藏即可。循环的话也是通过遍历textbox控件来实现。
      

  2.   


    谢谢!不过它没报错啊= =
    其实还是没太理解。那应该怎么改呢?
    刚刚开始上VBA的课,小白都算不上,可能问题有点幼稚,望大神们见谅啊!
      

  3.   

    没关系,熟练后就基本上不这么干了........下面给一个隐藏部分的代码,你参考一下:
    Sub test()
        ''''.......
        k = InputNumber ''输入的行数
        Dim bTr As Boolean
        For i = 1 To 20 ''共20行
            bTr = i <= k
            Me.Controls("textbox" & CStr(i)).Visible = bTr
            Me.Controls("textbox" & CStr(i + 20)).Visible = bTr
        Next i
        '''.....
    End Sub
    m=10时,不能用Textboxm代表textbox10...
      

  4.   

    我修改下你的代码,看我这么累的原因,把分给我吧
    你的代码 
    Public Sub InputCoord()
        '根据上一个对话框输入的组数InputNumber,画表格,隐藏多余表格
        Dim i As Integer
        Dim k As Integer
        k = 20 - InputNumber'这里,InputNumber是个textbox吗?是的话要修改为InputNumber.text(注:得到的是个文本型的数)
        For i = 0 To k'因为你的k在前面部分没有得到值,VB默认为0
            If i < k Then'这里你的思路乱了,因为在循环中,你的i都是小于k的,哦,最后一个是=
                Set m = 20 - i'这里,VB没有这么给变量赋值的,应当是m = 20 -i
                Set n = 40 - i
                TextBoxm.Visible = False‘TextBoxm.这里不报错,应该是正好你有个textboxm按钮吧。估计你是想实现textbox1~N的目的,这是错的,控件不能这么调用。就算是你想得到textbox1,也应该写成“text" & i  '这是大错特错的地方
                TextBoxn.Visible = False
                Labelm.Visible = False
            End If
        Next i
        
        '调整整个窗体长度
        InputNumber3.Height = 435 - 18 * k'InputNumber3你确定你真有InputNumber3这个控件吗?
        '调整"返回"按钮位置
        BackButton3.Top = 378 - 18 * k'BackButton3你确定你真有这个控件吗?控件的名称,要看控件的名称,而不是控件的caption
        '调整"清空"按钮位置
        ClearButton3.Top = 342 - 18 * k
        '调整清空按钮位置
        ComButton3.Top = 306 - 18 * k
    End Sub
    '点击返回按钮
    Private Sub BackButton3_Click()
        InputNumber3.Hide
        IfYes2.Show
    End Sub'点击清空按钮,弹出 ClearYes4 对话框询问是否清空
    Private Sub ClearButton3_Click()
        ClearYes4.Show
    End Sub'点击确认按钮
    Private Sub ComButton3_Click()
     '遇到有未填写的表格,报错
        For i = 1 To InputNumber
            If (Me.Controls(("textbox" & i)) = "" Or Me.Controls(("textbox" & 20 + i)) = "") Then
                MsgBox "No empty entries allowed!"
            End If
        Next i
        '弹出 温馨提示 CommandYes4 对话框,确认数据是否有误
        CommandYes4.Show
    End Sub
    总之吧,感觉你还是从头学一下的好,嘿嘿,几乎找不到你代码中正确的部分。
    至于为啥没出错,估计是代码部分,根本就没有运行到。