Excel VBA - 按用户定义的金额解锁/取消隐藏文本框

时间:2017-02-16 21:33:31

标签: excel excel-vba vba

在我的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需要什么。我错过了什么?

2 个答案:

答案 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

但是,我再说一遍,你也可以在运行时添加它们。取决于您计划对数据执行的操作。不要忘记你还需要考虑工作表的用户,他也可能发现它太杂乱了,根本就不使用它。

祝你好运