从具有动态范围的封闭excel工作簿中获取数据时出错

时间:2014-01-07 19:37:33

标签: excel vba excel-vba

我的代码收到错误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:此工作表中的公式包含一个或多个无效引用。验证您的公式包含有效路径,工作簿,范围名称和单元格引用”。

2 个答案:

答案 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)

我自己设法解决了这个问题。问题是文件名列表是从另一个列表复制并粘贴的。我编写它的方式选择的区域不是通过查找最后一行并仅复制该部分来完成的,而是复制了有限数量的单元格,其中包括数据和空白单元格。因此,当访问文件时,代码工作正常,但是当后面的代码有一个空白单元时,它会导致错误发生。