excelvba。将变量的数据类型作为变量发送到子节点

excelvba。将变量的数据类型作为变量发送到子节点,excel,vba,Excel,Vba,我简化了我的问题,使之尽可能通用 假设我想创建一个子集,它接受一个集合和该集合中预期包含的对象的数据类型,并将指定的参数打印到即时窗口。sub需要将集合(例如ThisWorkbook.Worksheets)、数据类型(例如Workheet)和属性(例如Name)作为输入 潜艇看起来像: Sub PrintMembers(ByVal myCol as Collection, ByVal datatype as ????, ByVal property as ????) dim myObj as

我简化了我的问题,使之尽可能通用

假设我想创建一个子集,它接受一个集合和该集合中预期包含的对象的数据类型,并将指定的参数打印到即时窗口。sub需要将集合(例如ThisWorkbook.Worksheets)、数据类型(例如Workheet)和属性(例如Name)作为输入

潜艇看起来像:

Sub PrintMembers(ByVal myCol as Collection, ByVal datatype as ????, ByVal property as ????)
  dim myObj as datatype?
  for each  in myCol
    debug.print myObj.property?
  next
End Sub
然后我可以打电话给:

Call PrintMembers(ThisWorkbook.Worksheets, Worksheet, "Name") 
或者沿着这些路线的东西,它会输出:

Sheet1
Sheet2
Sheet3

我不太确定您在问什么,但似乎您可能正在寻找
CallByName()
函数:

Public Sub RunMe()
    PrintMembers ThisWorkbook.Worksheets, "Name"
End Sub

Private Sub PrintMembers(col As Object, prop As String)
    Dim item As Object

    For Each item In col
        Debug.Print CallByName(item, prop, VbGet)
    Next
End Sub

您可以使用@Ambie的答案,并将
数据类型
作为字符串参数添加到该函数中。然后,作为循环的一部分,您可以使用
如果TypeName(item)=datatype,那么…
来检查预期的类型。