在我的UserForm页面上,除了第一个文本框外,我需要隐藏1000个TextBox。到目前为止,这部分很容易。我添加了一些文本框并通过页面设置创建了滚动条。
我想根据单独文本框中输入的内容取消隐藏框。示例:我输入“10”并按UnHide,出现10个文本框。我计划在此页面NPTB1 - 1000上标记我的所有文本框.1000个文本框是我的工作表上的一个占位符,用于1000个电话号码。如果一个1000打破了表格,请告诉我你的经历,因为这是我第一个挖掘这个神奇工具的用户形式。
ActiveSheet.OLEObjects("Textbox1").Visible = Not ActiveSheet.OLEObjects("Textbox1").Visible
我看了一个循环公式。
Dim i As Integer
For i = 1 To 6
Cells(i, 1).Value = 100
Next i
但我一直试图让这段代码以某种方式取代零碎而没有运气。我知道这个循环公式将添加1000到6个单元格。只是不确定userform需要什么。我错过了什么?
答案 0 :(得分:0)
继续使用循环的想法,如下所示的一些代码就足够了:
Dim intNumberOfTBs as Integer
'assuming you are typing in cell "A1" of "Sheet1" the number of textboxes to display
intNumberOfTBs = Sheet1.Cells(1,1).value
Dim iTB as Integer
For iTB = 1 to intNumberOfTBs
ActiveSheet.OLEObjects("NPTB" & iTB).Visible = true
Next
您可以遍历工作表上的所有oleObjects并首先关闭它们。类似的东西:
Dim oTB as Object
For each oTB in ActiveSheet.OleObjects
If left(oTB.Name, 4) = "NPTB" Then
ActiveSheet.OLEObjects("NPTB" & iTB).Visible = false
End If
Next oTB
答案 1 :(得分:0)
那么,你为什么要把它封顶呢?我不明白为什么你需要1000个文本框,因为你总是可以从少数文本中收集值,将它们保存在别处,然后重置。 此外,您可以尝试动态添加框: 首先,这段代码不是很好:
ActiveSheet.OLEObjects("Textbox1").Visible = Not ActiveSheet.OLEObjects("Textbox1").Visible
根据您目前的具体操作,最好将可见值设置为True或False。
但是如果你想以编程方式取消隐藏文本框,并给出你的名字参考,你必须选择喜欢的东西:
Dim tb as OLEObject, ws As Worksheet
Set ws = ActiveSheet
For i = 1 to numberToUnhide
Set tb = ws.OLEObjects("NPTB" & i)
tb.Visible = True
Next
但是,我再说一遍,你也可以在运行时添加它们。取决于您计划对数据执行的操作。不要忘记你还需要考虑工作表的用户,他也可能发现它太杂乱了,根本就不使用它。
祝你好运