Izbira datotek znotraj VBA - Excel Nasveti

Renato iz Italije vpraša:

Kako lahko v VBA odprem delovni zvezek in izbiram s seznama? Ko posnamem makro, trdo kodira ime izbrane datoteke v makru.

V VBA obstaja ukaz, imenovan GetOpenFileName. Prikaže se polje Odpri datoteko. Lahko se pomaknete do imenika, izberete datoteko in kliknite Odpri. Na tej točki ukaz ne odpre datoteke, ampak samo prenese ime nazaj v vaš program. Tu je primer uporabljene kode:

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 vpraša:

Kako lahko zaženem makro, preden se datoteka zapre ali shrani?

Makro je treba vnesti v kodno podokno, povezano s "ThisWorkbook". V desnem spustnem meniju izberite BeforeClose ali BeforeSave.

Ken piše:

Imam obdelovalec dogodkov na delovnem listu, ki se vsaj 16-krat zveni. Kaj se dogaja?

Kenov vodnik je bil preprost - če vnos ni bil številčen, bi vnos spremenil v velike črke. Tu je težava. Ko je vrednost vnosa spremenil v velike črke, je to še ena sprememba delovnega lista in dogodek bi se spet sprožil. Vsakič, ko bi se sprožil dogodek spremembe, je Ken spremenil delovni list in makro je bil rekurzivno klican, dokler v kliku ni zmanjkalo pomnilnika.

Rešitev je začasno ustaviti izvajanje dogodkov, medtem ko spremenite vrednost v velike črke. To lahko storite tako, da spremenite vrednost Application.EnableEvents na False. Tu je popravljeni 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 iz Velike Britanije zastavlja danes najbolj zanimivo vprašanje.

V enem delovnem zvezku imam rutino VBA, ki ustvari več drugih delovnih zvezkov. Želel bi imeti možnost dinamičnega dodajanja hiperpovezave v vsak nov delovni zvezek, ki bo usmerjen nazaj v delovni zvezek, ki je ustvaril nove delovne zvezke.

Andy - to je kul ideja. Brez koristi, da vidim vašo kodo, si predstavljam, da bi kaj takega delovalo:

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

Zanimive Članki...