Вибір файлів у межах VBA - Поради Excel

Ренато з Італії запитує:

Як я можу відкрити книгу у VBA, вибравши зі списку? Коли я записую макрос, він жорстко кодує ім’я вибраного файлу в макросі.

У VBA є команда, яка називається GetOpenFileName. Відобразиться поле Відкрити файл. Ви можете перейти до каталогу, вибрати файл і натиснути Відкрити. На даний момент команда не відкриває файл, вона просто передає ім'я вашій програмі. Ось приклад використовуваного коду:

Sub TestIt() NewFN = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file") If NewFN = False Then ' They pressed Cancel MsgBox "Stopping because you did not select a file" Exit Sub Else Workbooks.Open Filename:=NewFN End If End Sub

Роджер запитує:

Як я можу запустити макрос до того, як файл буде закрито або збережено?

Макрос потрібно ввести на панелі коду, пов'язаної з "ThisWorkbook". У спадному меню праворуч виберіть BeforeClose або BeforeSave.

Кен пише:

У мене є обробник подій робочого аркуша, який цикл, принаймні 16 разів. Що відбувається?

Обробник Кена був простий - якщо запис не був числовим, це змінило б запис на верхній регістр. Ось проблема. Коли він змінив значення запису на регістр, це ще одна зміна робочого аркуша, і подія знову запуститься. Кожного разу, коли спрацьовувала подія зміни, Кен міняв робочий аркуш, і макрос отримував рекурсивний виклик, поки у стеку викликів не закінчилося пам'яті.

Рішення полягає в тимчасовому припиненні запуску подій під час зміни значення на регістр. Це можна зробити, змінивши значення Application.EnableEvents на False. Ось виправлений макрос:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) If Not IsNumeric(Target.Value) Then Application.EnableEvents = False Target.Value = UCase(Target.Value) Application.EnableEvents = True End If End Sub

Енді з Великобританії задає найцікавіше питання сьогодні.

У мене є програма VBA в одній книзі, яка створює кілька інших книг. Я хотів би мати можливість динамічно додавати гіперпосилання в кожну нову книгу, яка вказуватиме на книгу, яка створила нові книги.

Енді - це крута ідея. Без переваги перегляду вашого коду, я думаю, щось подібне буде працювати:

Sub Testit() Creator = ActiveWorkbook.FullName '… . Andy's code to create the new workbook… . ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:= _ Creator, TextToDisplay:="Click Here to Return to " & Creator End Sub

Цікаві статті...