Неожиданные результаты от typename

Я получаю некоторые неожиданные результаты от имени типа и в тупике. Надеюсь, некоторые могут указать мне в правильном направлении.

Private Sub T()
    Dim d As Word.Document
    Dim s As String
    Dim c As Collection
    Dim i As Long
    Dim o As Object

    Set d = ActiveDocument
    s = "X"
    Set c = New Collection

    Debug.Print "d is a " & TypeName(d)
    Debug.Print "s is a " & TypeName(s)
    Debug.Print "c is a " & TypeName(c)

    c.Add (d)
    c.Add (s)
    For i = 1 To c.count
        Debug.Print "Item " & i & " of the collection is a " & " " & TypeName(c.Item(i))
    Next i
End Sub

Из чего я получаю следующий вывод:

d is a Document
s is a String
c is a Collection
Item 1 of the collection is a String
Item 2 of the collection is a String

Я ожидал получить следующее:

d is a Document
s is a String
c is a Collection
Item 1 of the collection is a Document
Item 2 of the collection is a String

Любые идеи, почему я получаю «String» вместо «Document» для первого элемента в коллекции?


person user3117497    schedule 05.03.2014    source источник


Ответы (1)


c.Add (d) 

не то же самое, что

c.Add d 

В первом случае, заключая d в круглые скобки, вы заставляете его вычисляться как выражение, и результат этого выражения (в данном случае String) добавляется в коллекцию. Во втором добавляется сам объект d.

Попробуйте сравнить прямо в окне Immediate:

? TypeName(ActiveDocument)       '>> Document

а также

? TypeName( (ActiveDocument) )   '>> String
person Tim Williams    schedule 05.03.2014
comment
Спасибо. Не знаю, понял бы я это когда-нибудь. Я даже не мог сосчитать, сколько раз я возглавлял помощь и каждый раз приходил к одному и тому же. Спасибо еще раз. - person user3117497; 06.03.2014
comment
Без проблем. Один из способов отметить эти типы проблем — следить за тем, когда VBEditor добавляет или сохраняет пробел между ключевым словом (например, именем метода, таким как Add) и открывающей скобкой — если скобка требуется для вызова метода, там не должно быть места (и редактор удалит его, если вы его поставите...) - person Tim Williams; 06.03.2014