Excel VBA使用工作簿对象调用时出现类型不匹配错误求助
问题原因分析
核心错误出在Workbooks集合的索引使用错误,和v_value的类型无关:
- 你把
FileName_A声明为Workbook类型,通过Workbooks.Open获取到的是一个工作簿对象。但Workbooks(xxx)的索引参数只能是两种类型:- 字符串:工作簿的名称(包含扩展名,比如"test.xlsx")
- 整数:工作簿在集合中的顺序序号(比如1代表第一个打开的工作簿)
- 你直接传入
Workbook类型的变量FileName_A当索引,这属于类型不匹配,代码在执行Workbooks(FileName_A)时就会触发错误,根本到不了给v_value赋值的步骤,因此无论怎么声明v_value的类型都没用。
修正方案
有两种简单的修正方式:
- 直接使用已获取的Workbook对象(推荐)
既然已经通过Workbooks.Open拿到了工作簿对象,直接用它访问工作表和单元格即可,不需要再通过Workbooks集合查找:Dim FileName_A As Workbook Dim v_value As Variant ' 或者根据单元格值类型选String等 Set FileName_A = Workbooks.Open("你的文件路径") v_value = FileName_A.Worksheets("ABC").Range("E3").Value - 使用工作簿名称作为索引
如果非要通过Workbooks集合访问,提取FileName_A的Name属性作为索引参数:Dim FileName_A As Workbook Dim v_value As Variant Set FileName_A = Workbooks.Open("你的文件路径") v_value = Workbooks(FileName_A.Name).Worksheets("ABC").Range("E3").Value
内容的提问来源于stack exchange,提问作者fana it
相关产品推荐
相关产品推荐

