Renato dari Itali bertanya:
Bagaimana saya boleh membuka buku kerja di VBA memilih dari senarai? Apabila saya merakam makro, ia mengekodkan nama fail yang dipilih dalam makro.
Terdapat perintah dalam VBA yang disebut GetOpenFileName. Ia memaparkan kotak Buka Fail. Anda boleh membuat navigasi ke direktori, pilih fail dan kemudian klik Buka. Pada ketika ini, perintah tidak membuka fail, tetapi hanya meneruskan nama tersebut ke program anda. Berikut adalah contoh kod yang digunakan:
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 bertanya:
Bagaimana saya boleh menjalankan makro sebelum fail ditutup atau disimpan?
Makro perlu dimasukkan pada panel kod yang berkaitan dengan "ThisWorkbook". Dari menu lungsur sebelah kanan, pilih BeforeClose atau BeforeSave.
Ken menulis:
Saya mempunyai pengendali acara lembaran kerja yang gelung, sekurang-kurangnya 16 kali. Apa yang sedang berlaku?
Pengendali Ken adalah mudah - jika entri itu bukan angka, ia akan mengubah entri menjadi huruf besar. Inilah masalahnya. Apabila dia mengubah nilai entri ke huruf besar, itu adalah perubahan lembaran kerja lain dan acara itu akan diaktifkan lagi. Setiap kali peristiwa perubahan berlaku, Ken akan mengubah lembaran kerja dan makro dipanggil secara berulang, sehingga timbunan panggilan kehabisan memori.
Penyelesaiannya adalah menghentikan sementara peristiwa daripada berjalan semasa anda menukar nilainya menjadi huruf besar. Anda boleh melakukan ini dengan mengubah nilai Application.EnableEvents menjadi False. Inilah makro yang diperbetulkan:
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 dari UK mengemukakan soalan paling menarik hari ini.
Saya mempunyai rutin VBA dalam satu buku kerja yang membuat beberapa buku kerja yang lain. Saya ingin dapat menambahkan hyperlink secara dinamik dalam setiap buku kerja baru yang akan menunjuk kembali ke buku kerja yang menghasilkan buku kerja baru.
Andy - ini adalah idea yang hebat. Tanpa faedah melihat kod anda, saya dapat membayangkan sesuatu seperti ini akan berfungsi:
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