Valg af filer inden for VBA - Excel-tip

Renato fra Italien spørger:

Hvordan kan jeg åbne en projektmappe i VBA ved at vælge fra en liste? Når jeg optager en makro, koder den hårdt navnet på den valgte fil i makroen.

Der er en kommando i VBA kaldet GetOpenFileName. Det viser feltet Åbn fil. Du kan navigere til et bibliotek, vælge filen og derefter klikke på Åbn. På dette tidspunkt åbner kommandoen ikke filen, den sender blot navnet tilbage til dit program. Her er et eksempel på den anvendte 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 spørger:

Hvordan kan jeg få en makro til at køre, før en fil lukkes eller gemmes?

Makroen skal indtastes i kodefeltet, der er knyttet til "ThisWorkbook". Vælg enten BeforeClose eller BeforeSave fra højre rullemenu.

Ken skriver:

Jeg har en regnearkbegivenhedshåndterer, der løkker mindst 16 gange. Hvad sker der?

Ken's handler var enkel - hvis posten var ikke-numerisk, ville det ændre posten til store bogstaver. Her er problemet. Da han ændrede postens værdi til store bogstaver, er det en anden ændring af regnearket, og begivenheden udløses igen. Hver gang ændringshændelsen ville affyre, ændrede Ken regnearket, og makroen blev kaldt rekursivt, indtil opkaldsstakken løb tør for hukommelse.

Løsningen er midlertidigt at stoppe begivenheder i at køre, mens du ændrer værdien til store bogstaver. Du kan gøre dette ved at ændre værdien af ​​Application.EnableEvents til False. Her er den korrigerede 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 fra Storbritannien stiller dagens mest interessante spørgsmål.

Jeg har en VBA-rutine i en projektmappe, der opretter flere andre projektmapper. Jeg vil gerne være i stand til dynamisk at tilføje et hyperlink i hver nye projektmappe, der peger tilbage på den projektmappe, der genererede de nye projektmapper.

Andy - det er en sej idé. Uden fordelen ved at se din kode kan jeg forestille mig, at noget som dette ville fungere:

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

Interessante artikler...