Добрый день, необходимо программным способом узнать о существовании объекта на Форме [vba]
Код
n=0 name = "TextBox_" While Not (Me.Controls(name & CInt(n)) Is Nothing) msgbox "форма с номером" & CStr(n) & " существует" n=n+1 Wend
[/vba] Данный способ не работает. Допустим есть 5 текст боксов, с 0...4, при n=5 выдает ошибку. Существует ли другой способ. Я знаю, что можно перебрать все объекты на форме, однако для моей задачи это не подходит, необходимо узнать, только имея имя объекта.
Добрый день, необходимо программным способом узнать о существовании объекта на Форме [vba]
Код
n=0 name = "TextBox_" While Not (Me.Controls(name & CInt(n)) Is Nothing) msgbox "форма с номером" & CStr(n) & " существует" n=n+1 Wend
[/vba] Данный способ не работает. Допустим есть 5 текст боксов, с 0...4, при n=5 выдает ошибку. Существует ли другой способ. Я знаю, что можно перебрать все объекты на форме, однако для моей задачи это не подходит, необходимо узнать, только имея имя объекта.Sashagor1982
Сообщение отредактировал Sashagor1982 - Воскресенье, 05.03.2023, 13:04
В вашем примере, в первом сообщении, вы делаете именно перебор всех TextBox-ов с индексом от 0 до 4, поэтому я не совсем понимаю, что именно Вы хотите. Может быть так (в TextBox1 вводите имя которое хотите найти): [vba]
Код
Private Sub CommandButton1_Click() Dim Tb As Control, i As Boolean For Each Tb In Me.Controls If TypeOf Tb Is MsForms.TextBox Then If Tb.Name = Me.TextBox1.Text Then i = True End If Next If i Then MsgBox Me.TextBox1.Text & " существует" Else MsgBox Me.TextBox1.Text & " не существует" End Sub
[/vba] или установите обработку ошибок (это ваш код) [vba]
Код
Private Sub CommandButton1_Click() On Error GoTo Oshibka n = 1 Name_1 = "TextBox" While Not (Me.Controls(Name_1 & CInt(n)) Is Nothing) MsgBox "форма с номером" & CStr(n) & " существует" n = n + 1 Wend Exit Sub Oshibka: MsgBox "форма с номером" & CStr(n) & " не существует" End Sub
В вашем примере, в первом сообщении, вы делаете именно перебор всех TextBox-ов с индексом от 0 до 4, поэтому я не совсем понимаю, что именно Вы хотите. Может быть так (в TextBox1 вводите имя которое хотите найти): [vba]
Код
Private Sub CommandButton1_Click() Dim Tb As Control, i As Boolean For Each Tb In Me.Controls If TypeOf Tb Is MsForms.TextBox Then If Tb.Name = Me.TextBox1.Text Then i = True End If Next If i Then MsgBox Me.TextBox1.Text & " существует" Else MsgBox Me.TextBox1.Text & " не существует" End Sub
[/vba] или установите обработку ошибок (это ваш код) [vba]
Код
Private Sub CommandButton1_Click() On Error GoTo Oshibka n = 1 Name_1 = "TextBox" While Not (Me.Controls(Name_1 & CInt(n)) Is Nothing) MsgBox "форма с номером" & CStr(n) & " существует" n = n + 1 Wend Exit Sub Oshibka: MsgBox "форма с номером" & CStr(n) & " не существует" End Sub
чем не устраивает первый вариант, единственное забыл добавить Exit For после Then i = True (так: Then i = True: Exit For) Я вообще не понимаю для чего это нужно, ведь всё текст боксы вы добавляете сами и должны знать их количество или в вашем случае индекс последнего, запишите его в переменную и не нужно будет искать последний
чем не устраивает первый вариант, единственное забыл добавить Exit For после Then i = True (так: Then i = True: Exit For) Я вообще не понимаю для чего это нужно, ведь всё текст боксы вы добавляете сами и должны знать их количество или в вашем случае индекс последнего, запишите его в переменную и не нужно будет искать последнийmsi2102
Ну может угадал, хотя, всё равно не понимаю, зачем искать то, что уже Вам известно [vba]
Код
Private Sub CommandButton1_Click() Dim Tb As Control, i As Boolean, n As Byte For n = 1 To 7 For Each Tb In Me.Controls If TypeOf Tb Is MsForms.TextBox Then If Tb.Name = "TextBox" & n Then i = True: Exit For Else i = False End If Next If i Then MsgBox "TextBox" & n & " существует" Else MsgBox "TextBox" & n & " не существует" Next End Sub
[/vba]
Ну может угадал, хотя, всё равно не понимаю, зачем искать то, что уже Вам известно [vba]
Код
Private Sub CommandButton1_Click() Dim Tb As Control, i As Boolean, n As Byte For n = 1 To 7 For Each Tb In Me.Controls If TypeOf Tb Is MsForms.TextBox Then If Tb.Name = "TextBox" & n Then i = True: Exit For Else i = False End If Next If i Then MsgBox "TextBox" & n & " существует" Else MsgBox "TextBox" & n & " не существует" Next End Sub