VBA Excel - выбор документа для обработки

Несколько раз была задача, когда изменения надо вносить не в текущий документ, а в документ с неизвестным именем. В результате получилась вот такая форма:

VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост

В listbox выводится список открытых документов или можно открыть файл через стандартный диалог открытия.

К сожалению, эксель не экспортирует формы в текстовом виде (во всяком случае, 2007 точно нет), поэтому будут скрины контролов и их свойств.

VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост
VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост
VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост
VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост
VBA Excel - выбор документа для обработки Microsoft Excel, Vba, Длиннопост

Как вы видите, я не заморачивался с названиями.

Код:

Public SrcName

Private Sub CommandButton1_Click()

SrcName= ""

If ListBox1.ListIndex >= 0 Then

SrcName= ListBox1.List(ListBox1.ListIndex)

UserForm1.Hide

End If

End Sub

Private Sub CommandButton2_Click()

SrcName= ""

UserForm1.Hide

End Sub

Private Sub OpnButton_Click()

iOpen = Application.Dialogs(xlDialogOpen).Show

If iOpen = True Then

SrcName= ActiveWorkbook.Name

UserForm1.Hide

Else

MsgBox "отмена", vbCritical, ""

Exit Sub

End If

End Sub

Private Sub UserForm_Activate()

SrcName= ""

ListBox1.Clear

NoShow = ThisWorkbook.Windows(1).Caption

For i = 1 To Application.Windows.Count

If Application.Windows(i).Caption <> NoShow Then ListBox1.AddItem (Application.Windows(i).Caption)

Next ' enum windows

End Sub

Пикабу сожрал все отступы, это не я!

Пример использования:

Dim SrcWB As Worksheet
UserForm1.Show
If UserForm1.SrcName= "" Then Exit Sub
Windows(UserForm1.SrcName).Activate
Set SrcWB = ActiveWorkbook

P.S. Баянометр считает, что эксель на 41% похож на клубничку. Мне кажется, что он недалёк от истины.

MS, Libreoffice & Google docs

719 постов15K подписчика

Добавить пост

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Чота сложно, вот вариант без кнопок, на одном листбоксе.

https://pastebin.com/TQr7t5pz

По классике код не проверял, но должно работать ¯\_(ツ)_/¯

Иллюстрация к комментарию
раскрыть ветку (3)
Автор поста оценил этот комментарий

Даблкликом хотел сделать ещё потом, но стало лениво. А кнопка открытия всё равно нужна иногда бывает.

раскрыть ветку (2)
Автор поста оценил этот комментарий

В любом случае, так хватать книгу за "активбук" не стоит.

Используй лучше filedialog, он более гибкий, и открывай выбранную книгу в ручную.

Да и показывать сообщение об отмене, сразу после того как мы нажали точно такую же кнопку, явно лишнее.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, логичнее было бы это уже в основном макросе показывать/не показывать. Старые костыли часто сам не замечаешь. Сейчас, чувствую, усилиями пикабушников допилится и пропатчится.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку