Renato iš Italijos klausia:
Kaip galiu atidaryti VBA darbaknygę, pasirinkdamas iš sąrašo? Kai įrašau makrokomandą, makrokomandoje jis užkoduoja pasirinkto failo pavadinimą.
VBA yra komanda „GetOpenFileName“. Jame rodomas langas Failas atidarytas. Galite pereiti prie katalogo, pasirinkti failą ir tada spustelėkite Atidaryti. Šiuo metu komanda neatidaro failo, ji tiesiog perduoda pavadinimą atgal į jūsų programą. Čia yra naudojamo kodo pavyzdys:
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
Rogeris klausia:
Kaip galiu paleisti makrokomandą prieš uždarant ar išsaugant failą?
Makrokomandą reikia įvesti kodo srityje, susietoje su „ThisWorkbook“. Dešiniajame išskleidžiamajame meniu pasirinkite BeforeClose arba BeforeSave.
Kenas rašo:
Aš turiu darbalapių įvykių tvarkytuvą, kuri persijungia bent 16 kartų. Kas vyksta?
Keno tvarkytojas buvo paprastas - jei įrašas būtų ne skaitinis, įrašas pasikeistų į didžiąsias raides. Čia yra problema. Kai jis pakeitė įrašo vertę į didžiąsias raides, tai yra kitas darbalapio pakeitimas ir įvykis vėl bus suaktyvintas. Kiekvieną kartą, kai pasikeitimo įvykis suveikė, Kenas pakeitė darbalapį ir makrokomanda buvo iškviečiama rekursyviai, kol baigėsi skambučių krūva.
Sprendimas yra laikinai sustabdyti įvykių vykdymą, kai pakeisite vertę į didžiąsias raides. Tai galite padaryti pakeisdami „Application.EnableEvents“ vertę į „False“. Štai pataisyta makrokomanda:
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 iš JK užduoda įdomiausią šiandienos klausimą.
Vienoje darbaknygėje turiu VBA rutiną, kuria keletą kitų darbaknygių. Norėčiau, kad galėčiau dinamiškai pridėti hipersaitą kiekvienoje naujoje darbaknygėje, kuri nukreiptų atgal į darbaknygę, kuriančią naujas darbaknyges.
Andy - tai šauni idėja. Neturėdamas naudos matydamas jūsų kodą, galiu įsivaizduoti, kad kažkas panašaus veiktų:
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