Excel 自动化错误-2147221080(80040188)
我打算执行一个VBA宏,该宏返回路径引用的文件的C34单元格值,该路径的图纸名称如MyHeaders中所示Excel 自动化错误-2147221080(80040188),excel,vba,Excel,Vba,我打算执行一个VBA宏,该宏返回路径引用的文件的C34单元格值,该路径的图纸名称如MyHeaders中所示 Sub Test() Dim myHeadings() As String Dim i As Long Dim path As String path = "C:\pathtofile\file.xlsx" Dim currentWb As Workbook Set currentWb = ActiveWorkbook Dim openWb As Workboo
Sub Test()
Dim myHeadings() As String
Dim i As Long
Dim path As String
path = "C:\pathtofile\file.xlsx"
Dim currentWb As Workbook
Set currentWb = ActiveWorkbook
Dim openWb As Workbook
Set openWb = Workbooks.Open(path)
Dim openWs As Worksheet
myHeadings = Split("Januari,Februari,Mars", ",")
For i = 0 To UBound(myHeadings)
Set openWs = openWb.Sheets(myHeadings(i))
currentWb.Sheets("Indata").Range("AA" & 73+Application.Match (myHeadings(i),Array,False)).Value = openWs.Range("C34").Value
Next i
End Sub
但是,这会在代码段处显示错误消息:自动化错误-2147221080(800401a8):
currentWb.Sheets("Indata").Range("AA73+Application.Match (i,Array,False)").Value = openWs.Range("C34").Value
我是VBA新手,还没有创建一个实际可运行的宏,所以原因可能很简单。通过谷歌搜索,我还没有找到解决这个问题的方法
编辑了一些代码以删除“Array”并更新了t我想您需要这样:
currentWb.Sheets("Indata").Range("AA" & 73 + Application.Match(i,Array,False)) = openWs.Range("C34")
如果结果
Application.Match(i,Array,False)
等于1,您想使AA74等于openws.Range(“C34”)中的任何值,对吗
“&”是一个浓缩字符,所以我们上面说的是,我们取“AA”,然后计算73+1,并将其连接到末尾。您缺少的是转义“AA”后面的文本以进行数值计算
编辑:-
在阅读了以上Aiken的评论后,我认为您的答案应该是完全删除匹配函数:
currentWb.Sheets("Indata").Range("AA" & 73 + i + 1).Value = openWs.Range("C34").Value
您是否使用
Currentwb
引用运行宏的工作簿或打开的工作簿?如果我正确理解了您试图实现的目标,我认为currentWb
指的是file.xlsx
,而不是宏工作簿?这是不正确的“范围(AA73+Application.Match(I,Array,False)”
-您可能指的是Range(“AA73”)+Application.Match(I,Array,False)
@JLILIAmen谢谢你的回复!我正在打开一个工作簿,我使用Alt+F11从那里启动宏。我在项目中有一个与“currentWb”同名的模块。这是真的吗?你从哪里知道currentWb指的是文件.xlsx?我不是指数组(“一月”、“二月”、“火星”)
语句,而是在应用程序.Match()
函数调用中使用数组
这个词。您使用它来分配数组是完全正确的。i
不是相应元素的索引吗?为什么要费心费事去处理应用程序.Match()的麻烦呢
查找您已经知道的内容?您的字面意思是“我想查找索引为I的项目的索引”是的,这就是我的本意!尽管如此,这再次给了我语法错误,即使我复制粘贴了你的代码片段。请参阅我答案的编辑部分,如果这样做了,我会将其编辑成一部分答案谢谢解释。这仍然在同一行中给出语法错误。