Как я узнаю, что на объект уже есть ссылка?

В некоторых VBA, прикрепленных к электронной таблице Excel 2003, мне нужно использовать некоторые объекты, создание экземпляров которых занимает некоторое время, поэтому я хочу сделать "установить" только один раз...

Легче показать код, чем писать объяснение!

' Declare the expensive object as global to this sheet
Dim myObj As SomeBigExpensiveObject

Private Sub CommandButtonDoIt_Click()

   ' Make sure we've got a ref to the object
   If IsEmpty(myObj) Then  ' this doesn't work!
      Set myObj = New SomeBigExpensiveObject
   End If

   ' ... etc

End Sub

Как я могу проверить, был ли уже установлен myObj?

Я пробовал IsNull(myObj) и IsEmpty(myObj) - оба пропускают «набор», независимо от состояния myObj. я не могу сделать

if myObj = Nil then

or

if myObj = Empty then

or

if myObj = Nothing then

Любые идеи?

САЛ


person SAL    schedule 18.06.2009    source источник
comment
На этой странице есть полезная информация о различиях между пустым, нулевым и ничем в VB/VBA beta.blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx   -  person Lunatik    schedule 19.06.2009


Ответы (1)


Это должно работать:

    If myObj IS Nothing Then

(обратите внимание на «IS»). Если это не сработает, то должна быть асинхронная инициализация, реализованная специально этим классом, поскольку вызовы инициализации COM по умолчанию являются синхронными. Итак, вам нужно проверить документ или поговорить с разработчиком о классе Big для некоторого свойства или метода синхронизации, чтобы вы могли подождать.

person RBarryYoung    schedule 18.06.2009
comment
«Пощечина» РБарри Янг — гений. Глупый я.... Я потратил последний час, пытаясь понять это. Как только я прочитал ваш ответ, я почувствовал себя идиотом... ‹/шлепок по голове› - person SAL; 18.06.2009
comment
‹blush› Хех, не волнуйся об этом. Я запомнил в основном потому, что одно и то же происходит все время в SQL с NULL, на самом деле WHERE column=NULL, вероятно, является самой распространенной ошибкой. - person RBarryYoung; 18.06.2009