Страницы: 1
RSS
Обращение в макросе к закрытой книге
 
Всем, добрый вечер! Есть фрагмент в макросе где мне нужно с помощью Поискпоз найти записи в закрытой книге (в столбце А, Лист1).
Когда книга открыта, макрос работает, когда закрыта, ошибка "Subscript out of range". Книгу открывать принципиально не надо.
Ошибка в строке Lastrow = Workbooks("Сверка на 28022019.xlsx").Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row.
Потому что когда использую статичный диапозон из закрытой книги, все Ок. А вот с динамичным диапозоном проблема для меня.
Код
Sub Сверка()
    Dim Lastrow As Long
    Lastrow = Workbooks("Сверка на 28022019.xlsx").Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    Range("B2").Formula = "=CONCATENATE(M2,N2)"
    Range("A2").Formula = _
        "=MATCH(B2,'C:\Users\Марина\Documents\Марина\Проверка ПЗВ\[Сверка на 28022019]СВР'!$A$1:$A$" & Lastrow & ",0)"
    End Sub
 
Етественно, Вы птаетесь обратиться к закрытой книге, не указывая пути к ней.
Убрать вообще Lastrow, в  MATCH ссылаться на диапазон заведомо больший. Если такое не проходит, добавить в формулу функцию для определения последней строки.
 
Цитата
RMG написал:
Lastrow = Workbooks("Сверка на 28022019.xlsx")
немного теории из азов:
Workbooks - коллекция всех открытых в приложении книг. Открытых. Уже на этом можно закончить разбор кода с получением последней заполненной строки, т.к. Вы даже до книги с листами достучаться так не сможете.
Поэтому Виктор правильно Вам говорит - определяйте последнюю ячейку прямо в формуле.
Хотя по сути мне все равно решительно непонятно желание принципиально не открывать книгу. В чем особый смысл такого изврата? Вот никогда не понимал. Изредка я прибегал к подобным манипуляциям и извлечению данных через ADO или ExecuteExcel4Macro, но только тогда, когда книга была большого размера и её открытие было слишком долгим, по сравнению с другими методами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Пыталась делать  вот так, берет диапозон А1:А1
Код
Sub Сверка()
    Range("B2").Formula = "=CONCATENATE(M2,N2)"
    Range("A2").Formula = _
        "=MATCH(B2,'C:\Users\Марина\Documents\Марина\Проверка ПЗВ\[Сверка на 28022019]СВР'!$A$1:$A$" & Cells(Rows.Count, 1).End(xlUp).Row & ",0)"
    End Sub
Изменено: RMG - 03.11.2019 15:52:53
 
Точно так же как Вы прописываете формулу в ячейку А2, Вы берёте  и данные по последней заполненной ячейке столбца. И кстати количество строк тоже. Т.е. всё относительно либо активного листа, либо листа где прописан код.
 
Вот так все нормально, но хотелось бы сделать с последней заполненной ячейкой в столбце А закрытого файла.
Код
Sub Сверка()
Range("B2").Formula = "=CONCATENATE(M2,N2)"
Range("A2").Formula = _
    =MATCH(B2,'C:\Users\Марина\Documents\Марина\Проверка ПЗВ\[Сверка на 28022019]СВР'!A:A,0)" 
End Sub
Изменено: RMG - 03.11.2019 18:38:44
 
Цитата
RMG написал:
хотелось бы сделать с последней заполненной ячейкой в столбце А закрытого файла
Цитата
vikttur написал:
добавить в формулу функцию для определения последней строки
т.е. делать это надо опираясь на сам файл, из которого данные берете. Но тут как бы...Это не ускорит формулу ни разу. Лучше все же ответьте на вопрос: используются макросы - почему нельзя открывать книгу? С чем связано это категоричное принципиальное требование? У него логичные корни есть какие-то?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх