我的代码停在以下行:
Dim wks As Worksheet
Set wks = ThisWorkbook.Sheets(vSheets(i, 1))
错误:
Run-time error 13, type mismatch
然而,在这一行我可以输入:
? ThisWorkbook.Sheets(vSheets(i, 1)).Name
进入即时窗口并获得结果
Cashf
很明显,工作表是基于名称vSheets(i,1)找到的。为什么我不能将其设置为工作表? Cashf是作为工作表创建的图表。那些是与工作表不同的对象类型吗?
答案 0 :(得分:3)
表格是工作表和图表的集合。图表和工作表是不同类型的对象。您应该将wrk定义为变体。
以下示例打印工作簿中的所有工作表名称及其类型
Dim s As Variant
For Each s In ThisWorkbook.Sheets
Debug.Print s.Name, TypeName(s)
Next
答案 1 :(得分:-1)
尝试使用ThisWorkbook.Worksheets而不是ThisWorkbook.Sheets [如果您需要将变量作为工作表。]
如果没有,请尝试不声明类型或将其声明为变体。
Public Sub main()
Dim ws
Set ws = ThisWorkbook.Sheets(1)
Debug.Print ws.Name, ws.Type
Set ws = ThisWorkbook.Sheets(2)
Debug.Print ws.Name, ws.Type
End Sub