Страницы: 1
RSS
Выбор книги для взятия значений из столбца
 
По условию макрос запускается из Книги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
Изменено: Карабас - 25.04.2018 10:47:11
 
Ни разу не программист на ВБА, но где в макросе указание на книгу2? А по умолчанию берутся значение из той книги, которая является активной.
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Добрый день,
Замените ваш кусочек на вот этот (это обращение к конкретной книге и листу) По умолчанию у Вас стоит текущая книга.
Код
   LrOW1 =  Workbooks("Книга2").Worksheets("Лист1").Cells(Rows.Count, Index1.Column).End(xlUp).Row
   MsgBox LrOW1
Изменено: ProFessor - 25.04.2018 10:07:59
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Замените ваш кусочек на вот этот (это обращение к конкретной книге и листу) По умолчанию у Вас стоит текущая книга.
На самом деле имя Книги2 не известно. Я думал, что через Application.InputBox выбрав ячейку условной Книги2, можно подтянуть имя этой книги, адрес ячейки выбранной и т.д.
Изменено: Карабас - 25.04.2018 10:15:23
 
Цитата
Карабас написал:
Книги2 не известно
То есть сейчас у вас 2 активные книги и нужно взять данные из другой книги, но не из той из которой Вы запускаете макрос?
Изменено: ProFessor - 25.04.2018 10:16:15
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
То есть сейчас у вас 2 активные книги и нужно взять данные из другой книги, но не из той из которой Вы запускаете макрос?
Да, переключиться на нужную книгу и нужный столбец я планировал через выбор открытой книги мышью и  Application.InputBox.
 
Тогда попробуйте это (берётся 2-я книга, которая не первая :D ) Ну сами того хотели же. Можете адаптировать как пожелаете
Код
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 - 25.04.2018 10:26:48
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Тогда попробуйте это (берётся 2-я книга, которая не первая  ) Ну сами того хотели же. Можете адаптировать как пожелаете
Виноват, не подробно расписал условие (поправил), что книгу хотел выбрать через Application.InputBox  и клик мыши нужного столбца и ячейки этой книги. Она может быть и не вторая, т.к. книг открыто может быть больше чем две.
Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Изменено: Карабас - 25.04.2018 10:49:29
 
Цитата
Карабас написал:
Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Вообще я обычно делаю так:
Создаю listbox (иногда listview, но с ним больше проблем из-за несовместимости Common Controls в 32 и 64 системах) на форме, в него вношу все имена активных книг (автоматически при инициализации формы).
Пользователь выбирает нужную книгу, я обрабатываю его выбор и осуществляю действия с выбранной им книгой, столбцом, ячейкой, и.т.д.

P.S. А вообще в Вашем случае лучше сделать надстройку xlam и прикрепить её к панели инструментов.
Изменено: ProFessor - 25.04.2018 11:04:15
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Вообще я обычно делаю так:
Выбор книги вручную из списка планировал использовать если мышью нельзя активировать нужную книгу.
Значит никак не выбрать другую книгу и ячейку кликом мыши?
 
Цитата
Карабас написал:
Значит никак не выбрать другую книгу и ячейку кликом мыши?
"Мои вкусы очень специфичны"  :D

Можно и так сделать, но это странный подход. Методология тогда иная.

Цитата
Карабас написал:
если мышью нельзя активировать нужную книгу
Это как вообще возможно? Мышь сломалась? Книга не активируется?
Изменено: ProFessor - 25.04.2018 11:37:57
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
Это как вообще возможно? Мышь сломалась? Книга не активируется?
Я наверно запутал или Вы меня не поняли :)
Все просто:
Хотел запустить макрос в одной книге (условно Книга1) для которого нужны данные из книги имя которой для макроса неизвестно (условно Книга2). Дать имя книги и номер столбца хотел выбором этой книги и ячейки мышью. Возможно ли это при условии, что мышь не сломалась :)?
 
Определение всего что Вы перечислили активного на данный момент
Код
WBname = ActiveWorkbook.Name
WBlist = ActiveWorkbook.ActiveSheet.Name
WBCellCol = ActiveCell.Column
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
закройте условно Книгу 2 и выберите книгу вот таким образом.
Код
Sub test()
    Dim ipath$
    ipath = Application.GetOpenFilename("(*.xls*),*.xls*")
    With GetObject(ipath).WorkSheets(1)
        'код................
        .Parent.Close False
    End With
End Sub

Или книга из которой берутся данные обязательно должна быть открыта?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Определение всего что Вы перечислили активного на данный момент
Это все не работает, если запускать макрос из Книги1 и выбрать мышью ячейку в Книге2 - все это будет относиться к Книге1.

Цитата
Nordheim написал:
Или книга из которой берутся данные обязательно должна быть открыта?
Должна быть открыта.
 
Цитата
Карабас написал:
Это все не работает
"Это работает, но похоже не в вашем случае.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
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
Изменено: Карабас - 26.04.2018 10:02:00
Страницы: 1
Наверх