Избор на файлове в VBA - Съвети за Excel

Съдържание

Ренато от Италия пита:

Как мога да отворя работна книга във VBA, като избирам от списък? Когато записвам макрос, той кодира твърдо името на избрания файл в макроса.

В VBA има команда, наречена GetOpenFileName. Той показва полето File Open. Можете да навигирате до директория, да изберете файла и след това да щракнете върху Отваряне. В този момент командата не отваря файла, тя просто предава името обратно на вашата програма. Ето пример за използвания код:

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

Интересни статии...