Как синхронизировать все Textbox1 в Workbook? - PullRequest
0 голосов
/ 10 марта 2019

В моей книге пять листов с текстовыми полями.Sheet1, Sheet2, ...... и Sheet5.

И код ниже на каждом листе.

Private Sub TextBox1_Change()

If Len(TextBox1.Value) = 0 Then
ActiveSheet.AutoFilterMode = False

Else
  If ActiveSheet.AutoFilterMode = True Then
  ActiveSheet.AutoFilterMode = False

End If

ActiveSheet.Range("A2:C" & Rows.Count).AutoFilter field:=1, Criteria1:="*" & TextBox1.Value & "*"
End If

End Sub

Я хотел бы синхронизировать TEXTBOXES на всех листах.

Например, если я наберу текст на TEXTBOX1 Листа 1, этот же текст будет введен на TEXTBOX1 всех других листов.

И я также хочу знать, какочистить TEXTBOX сразу на каждом листе.

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

1) поместите следующий код в новый модуль вашего проекта

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", "Sheet4", "Sheet5")
        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

2) измените ваше TextBox1_Change() событие на всех ваших листах следующим образом

Private Sub TextBox1_Change()
    If Not dontDoThat Then Synchronize Me.TextBox1.Text, Me.Name 'call Synchronize() only if your public variable allows it to

    ...
    (rest of your previous code follows)
    ...

End Sub

Очистить всетекстовые поля просто очистить один из них

0 голосов
/ 10 марта 2019

Вы можете добавить модуль в свой проект и добавить туда этот Sub (корректируя имена листов и TextBox, если необходимо):

Sub SetText(txt As String)
    Worksheets("Sheet1").TextBox1.Text = txt
    Worksheets("Sheet2").TextBox1.Text = txt
    Worksheets("Sheet3").TextBox1.Text = txt
    Worksheets("Sheet4").TextBox1.Text = txt
    Worksheets("Sheet5").TextBox1.Text = txt
End Sub

Затем, в событии Change для каждого TextBox, добавьте это

Private Sub TextBox1_Change()
    SetText Me.TextBox1.Text
End Sub

Для очистки всего текста вы можете установить .TextBox1.Text = ""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...