Ошибка при получении данных из закрытых книг Excel с динамическим диапазоном

Я получаю сообщение об ошибке 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: формула на этом листе содержит одну или несколько недопустимых ссылок. Убедитесь, что ваши формулы содержат допустимый путь, рабочую книгу, имя диапазона и ссылку на ячейку".


person user3116647    schedule 07.01.2014    source источник


Ответы (2)


Не знаю, почему вы хотите использовать 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
person PatricK    schedule 08.01.2014
comment
Спасибо, мне удалось решить проблему, которая не была связана с кодом, и я включил вашу лучшую версию моего кода. Большое спасибо за Вашу помощь - person user3116647; 08.01.2014

Мне удалось решить эту проблему самостоятельно. Проблема заключалась в том, что список имен файлов был скопирован из другого списка и вставлен. То, как я закодировал его, выбранной области не было сделано путем поиска последней строки и копирования только этого раздела, вместо этого копировалось конечное количество ячеек, который включал данные И пустые ячейки. Таким образом, при доступе к файлам код работал нормально, но когда дело дошло до следующего, в котором была пустая ячейка, возникла ошибка.

person user3116647    schedule 08.01.2014