Renato z Talianska sa pýta:
Ako môžem otvoriť zošit vo VBA výberom zo zoznamu? Keď zaznamenávam makro, napevno kóduje názov vybratého súboru v makre.
Vo VBA existuje príkaz s názvom GetOpenFileName. Zobrazí sa pole Otvoriť súbor. Môžete navigovať do adresára, vybrať súbor a potom kliknúť na Otvoriť. V tomto okamihu príkaz neotvorí súbor, iba odovzdá názov späť vášmu programu. Tu je príklad používaného kódu:
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 sa pýta:
Ako môžem spustiť makro pred zatvorením alebo uložením súboru?
Makro je potrebné zadať na paneli kódu spojenom s „ThisWorkbook“. V rozbaľovacej ponuke vpravo vyberte buď BeforeClose alebo BeforeSave.
Ken píše:
Mám obslužnú rutinu udalosti listu, ktorá sa opakuje najmenej 16-krát. Čo sa deje?
Kenov popisovač bol jednoduchý - ak by bol záznam nečíselný, zmenil by sa tento údaj na veľké písmená. Tu je problém. Keď zmenil hodnotu záznamu na veľké písmená, ide o ďalšiu zmenu v pracovnom hárku a udalosť by sa spustila znova. Zakaždým, keď sa udalosť zmeny aktivovala, Ken zmenil pracovný hárok a makro sa volalo rekurzívne, až kým zásobníku volaní nedošla pamäť.
Riešením je dočasné zastavenie spustenia udalostí, kým zmeníte hodnotu na veľké písmená. Môžete to urobiť zmenou hodnoty Application.EnableEvents na False. Tu je opravené makro:
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
Andy z Veľkej Británie si kladie najzaujímavejšiu otázku dneška.
V jednom zošite mám rutinu VBA, ktorá vytvára niekoľko ďalších zošitov. Chcel by som byť schopný dynamicky pridať hypertextový odkaz do každého nového zošita, ktorý bude smerovať späť na zošit, ktorý vygeneroval nové zošity.
Andy - to je super nápad. Bez toho, aby som videl váš kód, si viem predstaviť, že by niečo také fungovalo:
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