Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Узнать существует ли объект на форме UserForm - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Узнать существует ли объект на форме UserForm (Макросы/Sub)
Узнать существует ли объект на форме UserForm
Sashagor1982 Дата: Воскресенье, 05.03.2023, 12:53 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Добрый день, необходимо программным способом узнать о существовании объекта на Форме
[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 - Воскресенье, 05.03.2023, 13:04
 
Ответить
СообщениеДобрый день, необходимо программным способом узнать о существовании объекта на Форме
[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
Дата добавления - 05.03.2023 в 12:53
msi2102 Дата: Воскресенье, 05.03.2023, 13:49 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Так переберёт все TextBox-ы, а там дальше уже разберетесь.
[vba]
Код
Private Sub CommandButton1_Click()
Dim Tb As Control
    For Each Tb In Me.Controls
        If TypeOf Tb Is MsForms.TextBox Then MsgBox Tb.Name
    Next
End Sub
[/vba]
К сообщению приложен файл: 3519909.xlsm (18.3 Kb)


Сообщение отредактировал msi2102 - Воскресенье, 05.03.2023, 13:54
 
Ответить
СообщениеТак переберёт все TextBox-ы, а там дальше уже разберетесь.
[vba]
Код
Private Sub CommandButton1_Click()
Dim Tb As Control
    For Each Tb In Me.Controls
        If TypeOf Tb Is MsForms.TextBox Then MsgBox Tb.Name
    Next
End Sub
[/vba]

Автор - msi2102
Дата добавления - 05.03.2023 в 13:49
Sashagor1982 Дата: Воскресенье, 05.03.2023, 15:52 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Задача состоит в том, чтобы узнать зная только имя, перебирая все тексбоксы не подойдёт.
 
Ответить
СообщениеЗадача состоит в том, чтобы узнать зная только имя, перебирая все тексбоксы не подойдёт.

Автор - Sashagor1982
Дата добавления - 05.03.2023 в 15:52
msi2102 Дата: Воскресенье, 05.03.2023, 16:58 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
перебирая все тексбоксы не подойдёт.

В вашем примере, в первом сообщении, вы делаете именно перебор всех 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
[/vba]
К сообщению приложен файл: 6539136.xlsm (18.9 Kb) · kniga2.xlsm (19.2 Kb)


Сообщение отредактировал msi2102 - Воскресенье, 05.03.2023, 17:34
 
Ответить
Сообщение
перебирая все тексбоксы не подойдёт.

В вашем примере, в первом сообщении, вы делаете именно перебор всех 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
[/vba]

Автор - msi2102
Дата добавления - 05.03.2023 в 16:58
Sashagor1982 Дата: Четверг, 09.03.2023, 10:03 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Я так понимаю без обработки ошибок данную задачу не выполнить?
 
Ответить
СообщениеЯ так понимаю без обработки ошибок данную задачу не выполнить?

Автор - Sashagor1982
Дата добавления - 09.03.2023 в 10:03
msi2102 Дата: Четверг, 09.03.2023, 10:55 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
без обработки ошибок данную задачу не выполнить?
чем не устраивает первый вариант, единственное забыл добавить Exit For после Then i = True (так: Then i = True: Exit For)
Я вообще не понимаю для чего это нужно, ведь всё текст боксы вы добавляете сами и должны знать их количество или в вашем случае индекс последнего, запишите его в переменную и не нужно будет искать последний
 
Ответить
Сообщение
без обработки ошибок данную задачу не выполнить?
чем не устраивает первый вариант, единственное забыл добавить Exit For после Then i = True (так: Then i = True: Exit For)
Я вообще не понимаю для чего это нужно, ведь всё текст боксы вы добавляете сами и должны знать их количество или в вашем случае индекс последнего, запишите его в переменную и не нужно будет искать последний

Автор - msi2102
Дата добавления - 09.03.2023 в 10:55
msi2102 Дата: Четверг, 09.03.2023, 13:52 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Ну может угадал, хотя, всё равно не понимаю, зачем искать то, что уже Вам известно
[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]
К сообщению приложен файл: 8959568.xlsm (19.3 Kb)


Сообщение отредактировал msi2102 - Четверг, 09.03.2023, 20:39
 
Ответить
СообщениеНу может угадал, хотя, всё равно не понимаю, зачем искать то, что уже Вам известно
[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]

Автор - msi2102
Дата добавления - 09.03.2023 в 13:52
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Узнать существует ли объект на форме UserForm (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!