Odabir datoteka unutar VBA - Excel savjeti

Renato iz Italije pita:

Kako mogu otvoriti radnu knjigu u VBA odabirom s popisa? Kada snimim makronaredbu, teško kodira naziv odabrane datoteke u makronaredbi.

U VBA postoji naredba koja se zove GetOpenFileName. Prikazuje okvir Otvori datoteku. Možete doći do direktorija, odabrati datoteku, a zatim kliknuti Otvori. U ovom trenutku naredba ne otvara datoteku, već samo vraća naziv vašem programu. Evo primjera koda koji se koristi:

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 pita:

Kako mogu pokrenuti makronaredbu prije zatvaranja ili spremanja datoteke?

Makronaredbu treba unijeti u okno koda povezano s "ThisWorkbook". S desnog padajućeg izbornika odaberite BeforeClose ili BeforeSave.

Ken piše:

Imam alat za obradu događaja radnog lista koji se petlja, barem 16 puta. Što se događa?

Kenov rukovatelj bio je jednostavan - ako unos nije numerički, promijenio bi unos u velika slova. Ovdje je problem. Kad je promijenio vrijednost unosa u velika slova, to je još jedna promjena radnog lista i događaj bi se ponovno aktivirao. Svaki put kad bi se događaj promjene aktivirao, Ken bi promijenio radni list i makronaredba se rekurzivno zvala, sve dok skup poziva ne ostane bez memorije.

Rješenje je privremeno zaustaviti pokretanje događaja dok vrijednost mijenjate u velika slova. To možete učiniti promjenom vrijednosti Application.EnableEvents u False. Evo ispravljene makronaredbe:

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 postavlja najzanimljivije pitanje danas.

Imam VBA rutinu u jednoj radnoj knjizi koja stvara nekoliko drugih radnih knjiga. Volio bih da mogu dinamički dodati hipervezu u svaku novu radnu knjigu koja će upućivati ​​natrag na radnu knjigu koja je generirala nove radne knjige.

Andy - ovo je super ideja. Bez koristi od gledanja vašeg koda, mogu zamisliti da bi ovako nešto moglo funkcionirati:

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

Zanimljivi članci...