Itaaliast pärit Renato küsib:
Kuidas ma saan loendist valides VBA-s töövihiku avada? Kui salvestan makro, kodeerib see makros valitud faili nime kõvasti.
VBA-s on käsk nimega GetOpenFileName. See kuvab kasti Faili avamine. Võite navigeerida kataloogi, valida fail ja seejärel klõpsata nuppu Ava. Siinkohal ei ava käsk faili, vaid edastab selle nime teie programmile tagasi. Siin on näide kasutatavast koodist:
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 küsib:
Kuidas makro käivitada enne faili sulgemist või salvestamist?
Makro tuleb sisestada koodipaanile, mis on seotud selle "ThisWorkbookiga". Valige paremast rippmenüüst enneClose või BeforeSave.
Ken kirjutab:
Mul on töölehe sündmuste käitleja, kes töötab vähemalt 16 korda. Mis toimub?
Keni käitleja oli lihtne - kui kirje ei oleks arvuline, muudaks see kirjet suurtäheks. Siin on probleem. Kui ta muutis kirje väärtuse suurtäheks, on see veel üks töölehe muudatus ja sündmus käivitatakse uuesti. Iga kord, kui muutussündmus käivitub, vahetas Ken töölehte ja makrot hakati rekursiivselt kutsuma, kuni kõnepinu mälu sai otsa.
Lahendus on ajutiselt peatada sündmuste käitamine, kui muudate väärtuse suurtäheks. Seda saate teha, muutes rakenduse Application.EnableEvents väärtuseks False. Siin on parandatud 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
Suurbritanniast pärit Andy esitab tänase kõige huvitavama küsimuse.
Mul on ühes töövihikus VBA rutiin, mis loob mitu teist töövihikut. Tahaksin, et saaksin dünaamiliselt lisada igasse uude töövihikusse hüperlingi, mis suunaks tagasi uute töövihikute genereerinud töövihikule.
Andy - see on lahe idee. Ilma teie koodi nägemise eeliseta kujutan ette, et midagi sellist toimiks:
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