我的代码收到错误1004,该代码从列表中的已关闭工作簿中获取数据。代码按原样运行并检索值而没有问题,但它仍然会显示错误消息。我可能错过了一些非常明显的东西,所以我很感激任何人都可以提供帮助。以下是我的代码:
Sub ExecMacro4Excel()
Dim path As String
Dim workbookName As String
Dim worksheetName As String
Dim cell As String
Dim returnedValue As String
Dim lRow, x As Integer
Dim wbName As String
On Error GoTo PROC_ERR
lRow = Sheets("Raw Data").Range("C" & Rows.Count).End(xlUp).Row
path = Sheets("Front").Range("B4").Value
worksheetName = "Template"
cell = "J2"
x = 1
Do
x = x + 1
workbookName = Sheets("Raw Data").Range("C" & x).Value
returnedValue = "'" & path & "[" & workbookName & "]" & _
worksheetName & "'!" & Range(cell).Address(True, True, -4150)
Sheets("Raw Data").Range("I" & x) = ExecuteExcel4Macro(returnedValue)
Loop Until x = lRow
PROC_ERR:
MsgBox "Error: (" & Err.Number & ") " & Err.Description, vbCritical
End Sub
为了进一步说明,下面显示了1row变量所在的数据所在的位置以及数据的放置位置: http://i.imgur.com/1UcuTd8.png 此外,这里是保存原始数据的电子表格,并且对于所有文件都是相同的: http://i.imgur.com/j40FD3z.png 最后,这是错误框读取:“错误1004:此工作表中的公式包含一个或多个无效引用。验证您的公式包含有效路径,工作簿,范围名称和单元格引用”。
答案 0 :(得分:0)
不确定为什么要将 xlR1C1 用于范围地址,您可能错过了 returnedValue 开头的=
。您可以更简单地做到这一点(假设path
不会改变):
Sub ExecMacro4Excel()
Const worksheetName = "Template"
Const cell = "$J$2"
Dim path As String
Dim workbookName As String
'Dim worksheetName As String
'Dim cell As String
Dim returnedValue As String
Dim lRow, x As Integer
Dim wbName As String
On Error GoTo PROC_ERR
path = Sheets("Front").Range("B4").Value
If Right(path, 1) <> Application.PathSeparator Then path = path & Application.PathSeparator
lRow = Sheets("Raw Data").Range("C" & Rows.Count).End(xlUp).Row
For x = 2 To lRow
workbookName = Sheets("Raw Data").Range("C" & x).Value
returnedValue = "='" & path & "[" & workbookName & "]" & _
worksheetName & "'!" & Range(cell).Address
Sheets("Raw Data").Range("I" & x).Formula = returnedValue
Next
PROC_ERR:
MsgBox "Error: (" & Err.Number & ") " & Err.Description, vbCritical
End Sub
答案 1 :(得分:0)
我自己设法解决了这个问题。问题是文件名列表是从另一个列表复制并粘贴的。我编写它的方式选择的区域不是通过查找最后一行并仅复制该部分来完成的,而是复制了有限数量的单元格,其中包括数据和空白单元格。因此,当访问文件时,代码工作正常,但是当后面的代码有一个空白单元时,它会导致错误发生。