如何触发在多个工作表中输入所有文本框的按键? -VBA

时间:2019-03-10 21:03:27

标签: excel vba textbox

我的工作簿有三个带有文本框的工作表(名为Sheet1〜Sheet3)。

这有一个模块。

Public dontDoThat As Boolean ' a public variable, visible throughout all your project you'll use to give way to synchronizing activity

Option Explicit

    Sub Synchronize(txt As String, shtName As String)
        dontDoThat = True ' set your public variable to True and prevent subsequent TextBox1_Change() events to run it again


        Dim sht As Variant
        For Each sht In Array("Sheet1", "Sheet2", "Sheet3")
            If sht <> shtName Then Worksheets(sht).TextBox1.Text = txt

        Next

        dontDoThat = False ' set your public variable to False and allow subsequent TextBox1_Change() events to run it
    End Sub

这些代码可以同步所有工作表上的文本框。

但这仅适用于文本。

如果我在Sheet1的TEXTBOX1中键入一些文本,则相同的文本将显示在所有其他表的TEXTBOX1中。

但是搜索功能不适用于其他工作表。

在Sheet1的TEXTBOX1上键入一些文本并按Enter键后,搜索功能仅在Sheet1中起作用。

我想触发所有工作表的文本框上的Enter键。

这些表还具有TEXTBOX2。 因此,我想知道如何将同步化也应用于TEXTBOX1和TEXTBOX2。

我需要别人的帮助。

1 个答案:

答案 0 :(得分:0)

Neo,我之前做过类似的事情-在其中创建带有Change事件或指定的KeyDown事件(通常是Enter键- vbKeyReturn )的自动过滤器。由于您使用的是KeyDown事件,因此使用集合不会太详尽。例如,您可以按名称相似性或按TypeName滚动集合中的所有TextBox。

特别是,出于为什么我认为您遇到问题的原因,也许使用实际的Worksheet对象而不是变体遍历Worksheets集合。而且,由于它们是Worksheets对象,因此可以使用 OLEObjects

Dim sht As WorkSheet
Dim x as Integer

x = 1    

For Each sht In ThisWorkbook.WorkSheets
    Do Until sht.OLEObjects("TextBox & x") is Nothing
        If sht.Name <> shtName Then sht.OLEObjects("TextBox & x").Object.Text = txt
        x = x + 1
    Loop
Next

即使在该循环中,您也可以执行另一个循环以遍历多个文本框。让我们知道您要如何进行。希望这会有所帮助...