Ренато з Італії запитує:
Як я можу відкрити книгу у 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