Установка переменной для указанной рабочей книги приводит к ошибке вне диапазона - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь написать какой-то простой код, который извлекает диапазоны из одной рабочей книги (источника) и вставляет их в другую рабочую книгу (объединяет).Я хочу, чтобы «исходная» рабочая книга была указана при запуске макроса из «консолидированной» рабочей книги.

Приведенный ниже код работает нормально, когда я использую «Workbooks.Open (....», но при удалении ».Open "(например, Рабочие книги (## filename ##)) Я получаю нижний индекс ошибки вне диапазона.

Я использую Excel 2013, но кажется, что обе книги находятся в одном экземпляре (я вижуони оба в списке проектов VBA. Имя файла правильное и включает в себя расширение (опять же, код, как показано ниже, прекрасно работает, пока я его ".Открываю", но я хочу иметь возможность запускать код несколько раз, а я нетЯ хочу, чтобы файл открывался снова и снова).

Код также работает с ActiveWorkbook, но требует, чтобы я сначала перешел к «исходной» книге, а затем запустил макрос, что также не является предпочтительным.

Sub CopyData()
Dim wbk_data as Workbook 'source book
Dim wbk_cons as Workbook 'consolidate book
Dim wbk_data_s as Worksheet 'source sheet
Dim wbk_cons_s as Worksheet 'consolidate sheet

Dim target As String
    target = [wbk_name].Value2 'filename is included as a named cell in the worksheet

Set wbk_data = Workbooks(target) 'this is the line that doesn't work. 
    'Set wbk_data = Workbooks.Open(target) does work in this place
Set wbk_cons = ThisWorkbook
Set wbk_data_s = wbk_data.Worksheets("ExampleSrcSheet")
Set wbk_cons_s = wbk_cons.Worksheets("ExampleConsSheet")

Ценю любые советы.

1 Ответ

0 голосов
/ 19 февраля 2019

Проверьте, открыт ли он уже, и откройте его, если нет:

Dim target As String
target = [wbk_name].Value2 

'see if it's already open 
On Error Resume Next 'ignore any error on the next line
Set wbk_data = Workbooks(target)
On Error Goto 0      'stop ignoring errors

'if not already open, open it
If wbk_data Is Nothing Then
   Set wbk_data = Workbooks.Open(target)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...