Страницы: 1
RSS
Как сделать выпадающий список на листе с именами открытых книг?
 
Поиск не помог.

Можно даже просто на листе в столбик вывести.
Как я понял, тут только макрос поможет. Наверняка, кто-то такое делал.
 
maxrus163,
Код
Sub WorkBooksList()
    Dim book As Workbook
    For Each book In Workbooks
    Workbooks("книга куда выводим список").Worksheets("Лист1").Cells((Cells(Rows.Count, 1).End(xlUp).Row + 1), 1) = book.Name
    Next
End Sub
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо, выводит он мне на указанный лист, указанной книги список в ячейку А2. Но он не обновляется, макрос нужно запускать снова. Если запускаю, то он создает новый список ниже. Надо обуздать данный макрос. Чтобы обновления происходили автоматически при изменении этого списка ( то есть закрытии или открытии какой-либо книги), если это не сложно. Также чтобы список был всегда в одном и том же месте, например прописать жестко в макросе адрес ячейки.  К примеру, на листе1, ячейка B1. Приложил файл.
А еще можно как-то расширения убрать с имен книг?
Изменено: maxrus163 - 07.05.2020 09:25:37
 
maxrus163, для этого
Цитата
maxrus163 написал:
Также чтобы список был всегда в одном и том же месте, например прописать жестко в макросе адрес ячейки.  К примеру, на листе1, ячейка B1. Приложил файл.А еще можно как-то расширения убрать с имен книг?
как вариант так
Код
Sub WorkBooksList()
    Dim book As Workbook
    i = 1
    Workbooks("книга куда выводим список").Worksheets("Лист1").Range("B:B").ClearContents
    For Each book In Workbooks
    Workbooks("книга куда выводим список").Worksheets("Лист1").Cells(i, 2) = Left(book.Name, InStrRev(book.Name, ".") - 1)
    i = i + 1
    Next
End Sub

для этого

Цитата
maxrus163 написал:
Чтобы обновления происходили автоматически при изменении этого списка ( то есть закрытии или открытии какой-либо книги),
смотрите это https://www.excel-vba.ru/chto-umeet-excel/kak-otsledit-sobytienaprimer-vydelenie-yacheek-v-lyuboj-knige/

Не бойтесь совершенства. Вам его не достичь.
 
Mershik, спасибо большое. Это уже почти то, что хотел. Подходит. Небольшой вопрос.

Цитата
Mershik написал: Range("B:B")
Это место в коде, я так понял, - тот столбец, куда пишется список книг. Пытаюсь его поменять, например D:D, а он зараза, все равно в столбец В пишет? Что не так делаю?
 
maxrus163, эта часть кода ощищает столбец "B:B"
Код
Workbooks("книга куда выводим список").Worksheets("Лист1").Range("B:B").ClearContents

вот эта часть Cells(i, 2)  цифра 2 - означает номер столбца по счету меняйте ее на нужную

Код
Workbooks("книга куда выводим список").Worksheets("Лист1").Cells(i, НОМЕР СТОЛЦБА ПО СЧЕТУ) = Left(book.Name, InStrRev(book.Name, ".") - 1)
Не бойтесь совершенства. Вам его не достичь.
 
Mershik,получилось. Теперь буду применять. За ссылку, также спасибо.
 
Вот ещё вариант близкий этой теме: пользовательская форма с комбобоксом в котором имена открытых книг, он динамически меняется при открытии/закрытии новых книг.
Изменено: Niko.x87 - 11.05.2020 16:18:41
 
Mershik, приветствую. Можете доработать Ваш код https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=128366&a..., чтобы макрос работал независимо от переименования книги? Пожалуйста.
Изменено: maxrus163 - 09.06.2020 18:04:41
 
Mershik, сейчас в макросе прописывается имя конкретной книги, куда он выводит список открытых книг. Получается, если я меняю имя книги, в которой он работает, то он перестает работать. Нужно, чтобы имя книги в макросе менялось автоматически при переименовании книги пользователем.
 
maxrus163, это не возможно насколько мне известно) как макрос должен понимать что переименовали именно ту книгу куда мы копируем, а не другую? может все таки логика копирования есть ?
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, логика копирования - это копирование в активную книгу, то есть та, в которой находимся.
 
Код
Workbooks("книга куда выводим список")

замените на
Код
ThisWorkbook
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim,спасибо большое)
 
а куда бежать, если книги открыты в разных процессах Excel?
 
Доброе время суток
Цитата
Андрей Лящук написал:
если книги открыты в разных процессах Excel?
Собирать данные об открытых книгах со всех процессов Excel
 
Вобщем как-то так
Модуль modEnumWb

Модуль modDataValidation


+XLM функция Книги()
Код
=АРГУМЕНТ("rng";8)*РЕЗУЛЬТ(8)
=ВОЗВРАТ(ВЫЧИСЛИТЬ("WBList(rng)"))
и выпадающий список по формуле
Код
=Книги(Лист2!$A$2)
Изменено: Андрей Лящук - 12.06.2020 06:14:04
Страницы: 1
Наверх