Vba excel проверка существования объекта

Помогаю со студенческими работами здесь

Как проверить существование кнопки
Нужно удалить кнопку, которая может существовать, а может и не существовать (кнопка создается в…

Как проверить существование файла ?
Например name.xls, мне нужно чтоб макрос не останавливался, если файла не существует. Есть…

Проверить переменную типа Object на существование
Допустим я создал и переменную
dim j as object
Set j = New Access.ApplicationВ случае какой-либо…

Как проверить существование файла в папке,если filesystemobject не распознается VBA?
вопрос такой:
надо ли подключать какую-нибудь бибилиотеку для работы с файловой системой, а именно…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

3

What is the best way to check if object exists before using set on it ?

I have many workbooks, they contain checkboxes and optionbuttons.
I have an array that contain the list of all possible names of checkboxes and optionbuttons that the different workbooks may have

to make my question clear, let us suppose that i have

sArray(i) = "CheckBox15"

when I do

Set s = .OLEObjects(sArray(i))

is giving me an error 1004 when there is no a checkbox called «CheckBox15» in the active sheet.

what I want in my below code, is to add a line that tells :

if «CheckBox15» exists on current sheet (ws) then set …. is there any command that check if an object exists ?

'ws is the worksheet
Dim s As OLEObject
Dim i As Long

with ws
For i = 0 To UBound(sArray)
Set s = .OLEObjects(sArray(i))
If s.Object.Value = True Then
GetOptionCheck = GetOptionCheck & s.Object.Caption
End If
Next i
end with

Pᴇʜ's user avatar

Pᴇʜ

56k9 gold badges49 silver badges73 bronze badges

asked Mar 1, 2019 at 14:01

JustGreat's user avatar

You can build a custom boolean function for a quick check:

Public Function objectExists(ByRef ws As Worksheet, ByVal someName As String) As Boolean

    On Error GoTo objectExists_Error

    Dim someOle As OLEObject
    Set someOle = ws.OLEObjects(someName)
    objectExists = True

    On Error GoTo 0
    Exit Function

objectExists_Error:
    objectExists = False

End Function

The call it like this:

Sub TestMe()

    Dim s As OLEObject
    Dim i As Long
    Dim ws As Worksheet: Set ws = Worksheets(1)
    Dim someArray As Variant
    someArray = Array("CheckBox1", "CheckBox2", "CheckBox3", "CheckBox4")

    With ws
        For i = LBound(someArray) To UBound(someArray)
            If objectExists(ws, someArray(i)) Then
                Set s = .OLEObjects(someArray(i))
                Debug.Print s.object.Caption
            End If
        Next i
    End With

End Sub

answered Mar 1, 2019 at 14:23

Vityata's user avatar

VityataVityata

42.4k8 gold badges55 silver badges98 bronze badges

1

Узнать существует ли объект на форме UserForm

Sashagor1982

Дата: Воскресенье, 05.03.2023, 12:53 |
Сообщение № 1

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-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

 

Ответить

msi2102

Дата: Воскресенье, 05.03.2023, 13:49 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 291


Репутация:

104

±

Замечаний:
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

 

Ответить

Sashagor1982

Дата: Воскресенье, 05.03.2023, 15:52 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

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

 

Ответить

msi2102

Дата: Воскресенье, 05.03.2023, 16:58 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 291


Репутация:

104

±

Замечаний:
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]

Сообщение отредактировал msi2102Воскресенье, 05.03.2023, 17:34

 

Ответить

Sashagor1982

Дата: Четверг, 09.03.2023, 10:03 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

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

 

Ответить

msi2102

Дата: Четверг, 09.03.2023, 10:55 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 291


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

без обработки ошибок данную задачу не выполнить?

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

 

Ответить

msi2102

Дата: Четверг, 09.03.2023, 13:52 |
Сообщение № 7

Группа: Проверенные

Ранг: Обитатель

Сообщений: 291


Репутация:

104

±

Замечаний:
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 существование объекта?
Например объект selection.listobject или selection.offset(-3, 0)

Код к задаче: «Проверить существование объекта»

textual

on error resume next
set obj=...
if obj is nothing then
   'болт
else
   'гуд
end if

Полезно ли:

12   голосов , оценка 4.083 из 5

ГЛАВНАЯ

ТРЕНИНГИ

   Быстрый старт
   Расширенный Excel
   Мастер Формул
   Прогнозирование
   Визуализация
   Макросы на VBA

КНИГИ

   Готовые решения
   Мастер Формул
   Скульптор данных

ВИДЕОУРОКИ

ПРИЕМЫ

   Бизнес-анализ
   Выпадающие списки
   Даты и время
   Диаграммы
   Диапазоны
   Дубликаты
   Защита данных
   Интернет, email
   Книги, листы
   Макросы
   Сводные таблицы
   Текст
   Форматирование
   Функции
   Всякое
PLEX

   Коротко
   Подробно
   Версии
   Вопрос-Ответ
   Скачать
   Купить

ПРОЕКТЫ

ОНЛАЙН-КУРСЫ

ФОРУМ

   Excel
   Работа
   PLEX

© Николай Павлов, Planetaexcel, 2006-2022
info@planetaexcel.ru


Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

Техническая поддержка сайта

ООО «Планета Эксел»

ИНН 7735603520


ОГРН 1147746834949
        ИП Павлов Николай Владимирович
        ИНН 633015842586
        ОГРНИП 310633031600071 

Like this post? Please share to your friends:
  • Vba excel проверка объединения ячеек
  • Vba excel проверка на целое число
  • Vba excel проверка на пустую строку
  • Vba excel проверка на пустое значение
  • Vba excel проверка значения на дату