Unexpected results from typename

僤鯓⒐⒋嵵緔 提交于 2019-12-17 17:12:16

问题


I am getting some unexpected results from typename and am stumped. Hopefully some can point me in the right direction.

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

From which I get the following output:

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

What I expected to get was:

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

Any ideas why I get "String" instead of "Document" for the first item in the collection?


回答1:


c.Add (d) 

is not the same as

c.Add d 

In the first, by wrapping d in parentheses you're causing it to be evaluated as an expression and the result of that expression (in this case a String) gets added to the collection. In the second, the d object itself is added.

Try comparing directly in the Immediate window:

? TypeName(ActiveDocument)       '>> Document

and

? TypeName( (ActiveDocument) )   '>> String


来源:https://stackoverflow.com/questions/22186853/unexpected-results-from-typename

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!