Добрый день! Пробовал сделать что-то вроде ВПР и столкнулся с такой ситуацией. Зачастую приходится работать с разными книгами (сВПРить что-то из одной книги в другу). Для примера изложу на Коде-примере:
[vba]
Код
Sub Проверка() Dim Tablica2 As Range
Set Tablica2 = Application.InputBox("Укажите столбцы таблицы-исходника", "Таблица-исходник", Type:=8) Application.ScreenUpdating = False Artikul2_column = 1 MsgBox (Tablica2.Cells(1, Artikul2_column).Address) i2_n = Tablica2.Cells(Rows.Count, Artikul2_column).End(xlUp).Row MsgBox (i2_n) Application.ScreenUpdating = True End Sub
[/vba]
Почему при запуске макроса из одной книги, но выделении диапазона в другой книге, макрос будет работать только с форматами xlsx? Как можно сделать, чтобы при таком запуске он работал и с тем и с другим форматом?
Добрый день! Пробовал сделать что-то вроде ВПР и столкнулся с такой ситуацией. Зачастую приходится работать с разными книгами (сВПРить что-то из одной книги в другу). Для примера изложу на Коде-примере:
[vba]
Код
Sub Проверка() Dim Tablica2 As Range
Set Tablica2 = Application.InputBox("Укажите столбцы таблицы-исходника", "Таблица-исходник", Type:=8) Application.ScreenUpdating = False Artikul2_column = 1 MsgBox (Tablica2.Cells(1, Artikul2_column).Address) i2_n = Tablica2.Cells(Rows.Count, Artikul2_column).End(xlUp).Row MsgBox (i2_n) Application.ScreenUpdating = True End Sub
[/vba]
Почему при запуске макроса из одной книги, но выделении диапазона в другой книге, макрос будет работать только с форматами xlsx? Как можно сделать, чтобы при таком запуске он работал и с тем и с другим форматом?Roman777
[/vba] В куске Tablica2.Cells Вы смотрите на диапазон Tablica2, а в куске Rows.Count Вы смотрите на количество строк в том файле, где находится сам макрос. если Tablica2 в xls, а сам файл в xlsm, то мы пытаемся засунуть 1048576 строк в 65536
[/vba] В куске Tablica2.Cells Вы смотрите на диапазон Tablica2, а в куске Rows.Count Вы смотрите на количество строк в том файле, где находится сам макрос. если Tablica2 в xls, а сам файл в xlsm, то мы пытаемся засунуть 1048576 строк в 65536_Boroda_
Не работает, потому что в книгах XLS нельзя указывать: столбцы далее 256-го строки далее 65536 [vba]
Код
Sub Проверка() Dim Tablica2 As Range, i& Set Tablica2 = Application.InputBox("Укажите столбцы таблицы-исходника", "Таблица-исходник", Type:=8) Application.ScreenUpdating = False Artikul2_column = 1 MsgBox (Tablica2.Cells(1, Artikul2_column).Address) If ThisWorkbook.FileFormat <= xlExcel8 Then i = 65536 Else i = Tablica2.Rows.Count i2_n = Tablica2.Cells(i, Artikul2_column).End(xlUp).Row MsgBox (i2_n) Application.ScreenUpdating = True End Sub
[/vba]
ХМ заметил что у Вас в коде:[vba]
Код
Tablica2.Cells - все ячейки выбранного диапазона. может лучше: Tablica2.Parent.Cells - все ячейки листа
[/vba]
Не работает, потому что в книгах XLS нельзя указывать: столбцы далее 256-го строки далее 65536 [vba]
Код
Sub Проверка() Dim Tablica2 As Range, i& Set Tablica2 = Application.InputBox("Укажите столбцы таблицы-исходника", "Таблица-исходник", Type:=8) Application.ScreenUpdating = False Artikul2_column = 1 MsgBox (Tablica2.Cells(1, Artikul2_column).Address) If ThisWorkbook.FileFormat <= xlExcel8 Then i = 65536 Else i = Tablica2.Rows.Count i2_n = Tablica2.Cells(i, Artikul2_column).End(xlUp).Row MsgBox (i2_n) Application.ScreenUpdating = True End Sub
[/vba]
ХМ заметил что у Вас в коде:[vba]
Код
Tablica2.Cells - все ячейки выбранного диапазона. может лучше: Tablica2.Parent.Cells - все ячейки листа
SLAVICK, Нет-нет, я понял принцип Вашей вставки условия в код и ошибку свою, просто не ясно, почему в режиме отладки, код сработал и на изначальном варианте...)
SLAVICK, Нет-нет, я понял принцип Вашей вставки условия в код и ошибку свою, просто не ясно, почему в режиме отладки, код сработал и на изначальном варианте...)Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Четверг, 03.09.2015, 15:08
Вы переходили в другую книгу, чтобы посмотреть. А тогда (если код у Вас в обычном модуле, а не в модуле листа или книги) Rows.Count даст количество строк АКТИВНОГО на данный момент листа (выше я немного неверно написал). А активен у Вас становился лист, в котором Таблица2 и тогда количество строк совпадает и все нормально.
Вы переходили в другую книгу, чтобы посмотреть. А тогда (если код у Вас в обычном модуле, а не в модуле листа или книги) Rows.Count даст количество строк АКТИВНОГО на данный момент листа (выше я немного неверно написал). А активен у Вас становился лист, в котором Таблица2 и тогда количество строк совпадает и все нормально._Boroda_
_Boroda_, точно! SLAVICK, Да, я выделял столбцы... Но, мне казалось, что принципиальной разницы не должно быть столбцы или ограниченный диапазон...
_Boroda_, точно! SLAVICK, Да, я выделял столбцы... Но, мне казалось, что принципиальной разницы не должно быть столбцы или ограниченный диапазон...Roman777