Unexpected results from typename

I am getting some unexpected results from typename and are at a dead end. Hopefully some of them 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 receive 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
source share
1 answer
 c.Add (d) 

does not match

 c.Add d 

In the first case, enclosing d in parentheses, you call it as an expression, and the result of this expression (in this case String) is added to the collection. In the second, the object d itself is added.

Try comparing directly in the Immediate window:

 ? TypeName(ActiveDocument) '>> Document 

and

 ? TypeName( (ActiveDocument) ) '>> String 
+3
source

All Articles