По условию макрос запускается из Книги1, выбираю нужный столбец и ячейку Книги2 мышью, чтобы получить номер столбца и количество строк, но данные выдает по столбцу Книги1. Подскажите пожалуйста как получить данные Книги2. Имя Книга2 условное и оно не известно, планировал переключиться на нужную книгу через Application.InputBox и выбор ее мышью.
Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Код
Sub Тест()
Dim Index1
On Error Resume Next
Set Index1 = Application.InputBox("Индекс:", "Запрос данных", Selection.Address, Type:=8)
If Index1 Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран
MsgBox "Отмена выполнения", vbCritical, "Нет данных"
Exit Sub
End If
LrOW1 = Cells(Rows.Count, Index1.Column).End(xlUp).Row
MsgBox LrOW1
End Sub
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
ProFessor написал: Замените ваш кусочек на вот этот (это обращение к конкретной книге и листу) По умолчанию у Вас стоит текущая книга.
На самом деле имя Книги2 не известно. Я думал, что через Application.InputBox выбрав ячейку условной Книги2, можно подтянуть имя этой книги, адрес ячейки выбранной и т.д.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Тогда попробуйте это (берётся 2-я книга, которая не первая ) Ну сами того хотели же. Можете адаптировать как пожелаете
Код
Dim wb As Workbook
For Each wb In Workbooks
if Wb.name <> thisworkbook.name then
LrOW1 = Workbooks(wb.name).Worksheets("Лист1").Cells(Rows.Count, Index1.Column).End(xlUp).Row
MsgBox LrOW1
end if
Next
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
ProFessor написал: Тогда попробуйте это (берётся 2-я книга, которая не первая ) Ну сами того хотели же. Можете адаптировать как пожелаете
Виноват, не подробно расписал условие (поправил), что книгу хотел выбрать через Application.InputBox и клик мыши нужного столбца и ячейки этой книги. Она может быть и не вторая, т.к. книг открыто может быть больше чем две. Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Карабас написал: Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Вообще я обычно делаю так: Создаю listbox (иногда listview, но с ним больше проблем из-за несовместимости Common Controls в 32 и 64 системах) на форме, в него вношу все имена активных книг (автоматически при инициализации формы). Пользователь выбирает нужную книгу, я обрабатываю его выбор и осуществляю действия с выбранной им книгой, столбцом, ячейкой, и.т.д.
P.S. А вообще в Вашем случае лучше сделать надстройку xlam и прикрепить её к панели инструментов.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги вручную из списка планировал использовать если мышью нельзя активировать нужную книгу. Значит никак не выбрать другую книгу и ячейку кликом мыши?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
ProFessor написал: Это как вообще возможно? Мышь сломалась? Книга не активируется?
Я наверно запутал или Вы меня не поняли Все просто: Хотел запустить макрос в одной книге (условно Книга1) для которого нужны данные из книги имя которой для макроса неизвестно (условно Книга2). Дать имя книги и номер столбца хотел выбором этой книги и ячейки мышью. Возможно ли это при условии, что мышь не сломалась ?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
закройте условно Книгу 2 и выберите книгу вот таким образом.
Код
Sub test()
Dim ipath$
ipath = Application.GetOpenFilename("(*.xls*),*.xls*")
With GetObject(ipath).WorkSheets(1)
'код................
.Parent.Close False
End With
End Sub
Или книга из которой берутся данные обязательно должна быть открыта?
"Все гениальное просто, а все простое гениально!!!"
Nordheim написал: Это работает, но похоже не в вашем случае
Подскажите пожалуйста тогда, что я не так делаю? Почему когда эта часть когда отрабатывает и я выбираю Книгу2 и ячейку в ней ActiveWorkbook.Name все равно выдает имя Книги1?
Код
Dim Index1
On Error Resume Next
Set Index1 = Application.InputBox("Индекс:", "Запрос данных", Selection.Address, Type:=8)
If Index1 Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран
MsgBox "Отмена выполнения", vbCritical, "Нет данных"
Exit Sub
End If