Výběr souborů ve VBA - tipy pro Excel

Renato z Itálie se ptá:

Jak mohu otevřít sešit ve VBA výběrem ze seznamu? Když zaznamenávám makro, napevno kóduje název vybraného souboru v makru.

Ve VBA je příkaz s názvem GetOpenFileName. Zobrazí se pole Otevřít soubor. Můžete navigovat do adresáře, vybrat soubor a kliknout na Otevřít. V tomto okamžiku příkaz neotevře soubor, pouze předá název zpět vašemu programu. Zde je pří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 se ptá:

Jak mohu spustit makro před uzavřením nebo uložením souboru?

Makro je třeba zadat v podokně kódu přidruženém k „ThisWorkbook“. V rozevíracím seznamu vpravo vyberte buď BeforeClose nebo BeforeSave.

Ken píše:

Mám obslužnou rutinu události listu, která smyčky, alespoň 16krát. Co se děje?

Kenův popisovač byl jednoduchý - pokud by byl záznam nečíselný, změnil by záznam na velká písmena. Zde je problém. Když změnil hodnotu položky na velká písmena, jedná se o další změnu listu a událost by se znovu spustila. Pokaždé, když se událost změny aktivovala, Ken změnil list a makro bylo voláno rekurzivně, dokud zásobníku volání nedojde paměť.

Řešením je dočasně zastavit spouštění událostí, zatímco změníte hodnotu na velká písmena. Můžete to udělat změnou hodnoty Application.EnableEvents na False. Zde 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 Velké Británie si klade nejzajímavější otázku dneška.

V jednom sešitu mám rutinu VBA, která vytváří několik dalších sešitů. Chtěl bych být schopen dynamicky přidat hypertextový odkaz do každého nového sešitu, který bude odkazovat zpět na sešit, který generoval nové sešity.

Andy - to je skvělý nápad. Bez výhody vidět váš kód si dokážu představit, že by něco takového 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

Zajímavé články...