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