Az olasz Renato azt kérdezi:
Hogyan nyithatok meg egy munkafüzetet a VBA-ban egy listából választva? Amikor makrót rögzítek, az keményen kódolja a kiválasztott fájl nevét a makróban.
Van egy parancs a VBA-ban GetOpenFileName néven. Megjeleníti a File Open mezőt. Navigálhat egy könyvtárba, válassza ki a fájlt, majd kattintson a Megnyitás gombra. Ekkor a parancs nem nyitja meg a fájlt, csupán a nevet adja vissza a programjának. Íme egy példa a használt kódra:
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
Roger ezt kérdezi:
Hogyan érhetem el, hogy egy makró fusson egy fájl bezárása vagy mentése előtt?
A makrót meg kell adni a "ThisWorkbook" -hoz társított kódmezőben. A jobb oldali legördülő menüből válassza a BeforeClose vagy a BeforeSave lehetőséget.
Ken ezt írja:
Van egy munkalap eseménykezelőm, amely hurkol, legalább 16-szor. Mi folyik itt?
Ken kezelője egyszerű volt - ha a bejegyzés nem numerikus, akkor a bejegyzés nagybetűvé változik. Itt van a probléma. Amikor a bejegyzés értékét nagybetűre változtatta, az egy újabb munkalap-változás, és az esemény újra elindul. Valahányszor a változásesemény beindult, Ken megváltoztatta a munkalapot, és a makrót rekurzív módon hívták, amíg a hívásveremben nem volt memória.
A megoldás az, hogy ideiglenesen leállítja az események futtatását, miközben az értéket nagybetűvé változtatja. Ezt úgy teheti meg, hogy megváltoztatja az Application.EnableEvents értékét Hamis értékre. Itt van a javított makró:
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
Az Egyesült Királyságból származó Andy teszi fel a mai legérdekesebb kérdést.
Van egy VBA rutinom egy munkafüzetben, amely több más munkafüzetet is létrehoz. Szeretnék dinamikusan hozzáadni egy hiperhivatkozást minden új munkafüzethez, amely vissza fog mutatni az új munkafüzeteket létrehozó munkafüzetre.
Andy - ez egy jó ötlet. Anélkül, hogy hasznát látnám a kódjának, el tudom képzelni, hogy valami ilyesmi működne:
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