Страницы: 1
RSS
Как проверить наличие объекта на листе?
 
ну если чуть подробнее то вопрос такой: на листе возможно есть объект CheckBox6, если он есть то его нужно анализировать в коде.    
Такая вот проверка выдает ошибку времени исполнения:  
 If (Not IsEmpty(Book.Sheets(65).CheckBox6)) Then    
   MsgBox ("CheckBox6 есть")  
 Else:  
   MsgBox ("CheckBox6 ОТСУТСТВУЕТ")  
 End If  
 
ЗЫ: если можно, хотелось бы обойтись без оператора On Error
 
заменить Book.Sheets(65).CheckBox6 на:  
Sheets(65).shapes("CheckBox6")  
 
а чем onerror пугает?
 
If (IsEmpty(Worksheets(65).Shapes("CheckBox6"))) Then  
   MsgBox ("ЧЕКБОКСА НЕТ")  
 Else: MsgBox ("ЧЕКБОКС ЕСТЬ")  
 End If  
...  
так тож если компонента на форме нет, ошибка времени исполнения получается с сообщением что компонент с указанным именем не обнаружен :(  
 
on error не пугает просто не ахота идти в лобовую атаку - по вандальски эт как-то... хотя если ничего другого не останется - принципами придется пожертвовать
 
ну если имя чекбокса вы знаете, то можно через перебор всех имен шейпов на литсе проверить  
Sub Chekboxsa()  
Dim ctRl As Shape, m As Boolean  
For Each ctRl In Worksheets(1).Shapes  
   If ctRl.Name = "CheckBox1" Then  
       MsgBox ("ЧЕКБОКСА ЕСТЬ")  
   m = True  
   Exit For  
   End If  
Next  
If m = False Then MsgBox ("ЧЕКБОКСА НЕТ ОДНАКО :)")  
End Sub
 
{quote}{login=}{date=05.09.2008 08:53}{thema=Re: }{post}If (IsEmpty(Worksheets(65).Shapes("CheckBox6"))) Then  
   MsgBox ("ЧЕКБОКСА НЕТ")  
 Else: MsgBox ("ЧЕКБОКС ЕСТЬ")  
 End If  
...  
так тож если компонента на форме нет, ошибка времени исполнения получается с сообщением что компонент с указанным именем не обнаружен :(  
 
on error не пугает просто не ахота идти в лобовую атаку - по вандальски эт как-то... хотя если ничего другого не останется - принципами придется пожертвовать{/post}{/quote}  
нет, это прием программирования, не больше..  
 
как раз правильный прием - обработка ошибок..
 
пораскинул мозгами - мой первый вариант однозначно ошибочный - если объекта не существует, то как к нему обращаться? второй вариант мог бы сработать если бы разработчики не возбуждали ошибку в случае ненахождения ...shapes("НЕТ_ТАКОГО") а возвращали бы что-нибудь типа NULL. Третий вариант работать должен пожалуй, но кодом обилен) остается токма этот гордиев узел рубить с плеча оператором on error и не говорите что это не эстетично:)  
Всем спасибо!
Страницы: 1
Читают тему
Наверх