Квадратные скобки в VBA / VB6 используются для доступа к «внешним идентификаторам», то есть идентификаторам, которые в противном случае были бы недопустимыми.Например:
Public Enum Foo
Some
Thing
[Some Thing] ' please don't do this
End Enum
И скрытые элементы, чье имя начинается с подчеркивания:
Public Property Get NewEnum() As IUnknown
Set NewEnum = myCollection.[_NewEnum]
End Property
Однако в контексте кода в этом вопросе квадратные скобки: как сказал Скотт , по существу сокращенная запись для [_Global].Evaluate
, которая в конечном итоге разрешается до Application.Evaluate
... при условии, что мы не находимся в коде модуля Worksheet
, в этом случае это сокращение для Worksheet.Evaluate
-и оба возвращают Variant
, что означает, что любые цепочечные вызовы участников являются слепыми, вызовы с поздней привязкой разрешаются во время выполнения: Option Explicit
не может спасти вас от опечатки.
Вот почему Rubberduck (проект надстройки VBIDE с открытым исходным кодом, которым я управляю / в который способствую) разрешает их как «выражения времени выполнения»:
Другими словами это:
Range("E16").Value = Mid(line, 49, [6])
С таким же успехом можно написать так:
[E16] = Mid(line, [49], [6])
... это ужасный код с множеством избыточных неявных операций.
Тамникогда, НИКОГДА никаких причин заключать в квадратные скобкицелочисленный литерал: это не более чем окольный способ превратить литерал Integer
в Double
(поскольку числовые значения рабочего листа Variant/Double
):
Debug.Print TypeName(42)
Integer
Debug.Print TypeName([42])
Double
Что гораздо лучше сделать сявное преобразование:
Debug.Print TypeName(CDbl(42))
Double
... или даже с подсказкой типа ( gasp ):
Debug.Print TypeName(42#)
Double