VBA编译错误:类型不匹配问题求助(附相关代码)
嘿,这个编译错误的问题我帮你揪出来啦!完全是代码里的对象赋值写法错了才导致的「Type mismatch」,咱们来慢慢说清楚:
问题核心:对象变量赋值错误
你定义的FiWkb是Workbook类型的对象变量,但你用Set FiWkb = "文件路径字符串"这种写法直接把字符串赋值给了对象变量——Set关键字是专门用来给对象(比如工作簿、工作表、单元格)赋值的,不能直接丢个字符串进去,这就直接触发了类型不匹配的编译错误。
两种修正方案,按需选
情况1:需要打开新的工作簿给FiWkb
和你给BkWkb赋值的写法一样,用Workbooks.Open()方法返回Workbook对象:
Public Sub TransferTest() Dim FiWkb As Workbook Dim BkWkb As Workbook ' 正确打开两个工作簿(如果是同一个文件,其实没必要打开两次,这里先按你的逻辑修正) Set FiWkb = Workbooks.Open("C:\Users\60050987\Desktop\FI INSPECTOR PROJECT\FI Inspector Data.xlsx") Set BkWkb = Workbooks.Open("C:\Users\60050987\Desktop\FI INSPECTOR PROJECT\FI Inspector Data.xlsx") ' 补充完整你的赋值逻辑,比如从FiWkb的某个单元格取数 BkWkb.Sheets("PhosData").Range("A2").Value = FiWkb.Sheets("你的源工作表").Range("源单元格").Value ' 按需关闭工作簿,记得控制是否保存修改 ' FiWkb.Close SaveChanges:=False ' BkWkb.Close SaveChanges:=True End Sub
情况2:FiWkb是已经打开的工作簿
不用重新打开,直接通过工作簿名称引用:
Public Sub TransferTest() Dim FiWkb As Workbook Dim BkWkb As Workbook ' 直接引用已打开的目标工作簿(文件名要准确,包括.xlsx后缀) Set FiWkb = Workbooks("FI Inspector Data.xlsx") Set BkWkb = Workbooks.Open("C:\Users\60050987\Desktop\FI INSPECTOR PROJECT\FI Inspector Data.xlsx") ' 补充赋值逻辑 BkWkb.Sheets("PhosData").Range("A2").Value = FiWkb.Sheets("源工作表").Range("源单元格").Value End Sub
额外小提醒
- 如果你的需求是同一个文件内的数据转移,完全没必要打开两次工作簿,直接操作同一个Workbook对象就好,既能减少错误又节省资源;
- 实际写代码时可以加个错误处理,比如判断文件是否存在、工作表是否存在,避免运行时弹出意外错误。
内容的提问来源于stack exchange,提问作者musicalpoet
相关产品推荐
相关产品推荐

