String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true
Убедитесь, что вы понимаете, почему. Это потому, что сравнение ==
сравнивает только ссылки; equals()
метод сопоставляет содержимое по символу.
Когда вы вызываете new для a
и b
, каждый получает новую ссылку, указывающую на "foo"
в таблице строк. Ссылки разные, но контент один и тот же.
Вы можете добавить модуль в свой проект и добавить туда этот 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 добавьте это
[ 111] Чтобы очистить весь текст, вы можете установить .TextBox1.Text = ""
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
Чтобы очистить все текстовые поля просто очистить один из них