Makro Acara Untuk Menukar Header Excel - Petua Excel

Isi kandungan

Donna dari Missouri bertanya:

Adakah anda mempunyai idea bagaimana saya boleh mendapatkan jalan di mana dokumen tersebut difailkan ditunjukkan dalam tajuk atau footer - atau di mana sahaja di dalam dokumen tersebut. Saya boleh mendapatkan nama fail dengan & f tetapi saya tidak dapat mengetahui cara membuat jalan.

Pertama sekali, saya faham bahawa Microsoft telah menambahkan fungsi ini ke Excel XP dan saya menawarkan pujian kepada mereka kerana ini adalah masalah yang sering diajukan. Mana-mana pembaca yang telah menaik taraf ke Office XP tidak memerlukan teknik dalam hujung minggu ini untuk menyelesaikan masalah ini, tetapi mereka masih akan berguna untuk menyelesaikan masalah lain.

Penyelesaian untuk tip ini adalah jenis makro khas yang disebut makro pengendali peristiwa. Kami akan mengawal Excel secara ringkas setiap kali hendak mencetak buku kerja kami dan menambahkan jalan semasa ke tajuk.

Banyak pengguna Excel telah berusaha merakam makro sederhana. Makro disimpan dalam modul yang disebut Module1 atau Module2 dan menjadi sebahagian daripada projek anda. Hari ini, saya akan membincangkan makro pengendali acara. Makro ini terdapat pada modul kod khas yang dikaitkan dengan setiap lembaran kerja atau buku kerja.

Petua masa lalu seperti Masukkan Masa Excel Tanpa hujung Colon telah menangani acara Worksheet_Change. Petua hari ini menghendaki kita menambahkan beberapa kod pada acara BeforePrint di Workbook.

Kod yang ditambahkan ke acara akan dijalankan setiap kali acara itu "dipecat". Dalam kes ini, bila-bila masa buku kerja Excel dicetak, sebelum pencetakan dimulakan, Excel menukar kawalan ke kod VBA dan membenarkan apa sahaja yang dapat anda tentukan dalam kod VBA berlaku secara automatik sebelum mencetak.

Saya akan menganggap anda baru dalam makro pengendali acara. Saya akan melalui cara yang tepat untuk sampai ke tempat yang betul untuk memasukkan makro ini.

Saya mempunyai buku kerja bernama 'Tip055 Sample.xls'. Dengan buku kerja yang dimuatkan di Excel, saya akan menekan alt = "" + F11 untuk memulakan penyunting asas visual. Paparan lalai editor adalah seperti yang ditunjukkan di sebelah kanan. Di sebelah kiri, anda biasanya melihat panel Projek disusun di atas panel Properties. Sebahagian besar bahagian kanan skrin merangkumi Code Pane. Sekiranya anda tidak mempunyai makro di buku kerja anda, panel kod anda akan berwarna kelabu seperti yang ditunjukkan di sebelah kanan.

Saya telah menambahkan perkataan skrip miring biru pada gambar untuk mengenal pasti tiga panel - anda tidak akan melihatnya dalam contoh anda.

Penting agar anda dapat melihat Project Pane di editor VB. Sekiranya pandangan anda mengenai editor VB tidak termasuk panel projek, tekan Ctrl + R untuk melihat Panel Projek. Atau, klik ikon bar alat yang ditunjukkan di bawah:

Panel projek akan menunjukkan projek untuk setiap buku kerja Excel yang terbuka dan setiap Tambahan yang dipasang. Klik tambah kelabu di sebelah nama buku kerja anda untuk mengembangkan projek buku kerja anda. Kemudian, klik tambah kelabu di sebelah folder Objek Microsoft Excel untuk mengembangkan folder objek. Anda kini harus melihat satu entri untuk setiap lembaran kerja dan satu entri yang disebut ThisWorkbook.

Klik kanan entri untuk ThisWorkbook dan pilih Lihat Kod dari menu pop timbul.

Anda sekarang mungkin akan mempunyai panel kod putih kosong yang besar di sebelah kanan skrin. Terdapat dua dropdown di bahagian atas panel kod yang akan menyatakan (Umum) dan (Deklarasi).

  • Dari menu lungsur kiri, pilih Buku Kerja.
  • Lungsur turun yang betul kini diisi dengan semua acara yang dapat diprogramkan yang berkaitan dengan buku kerja. Terdapat acara di sini yang akan menjalankan kod setiap kali buku kerja dibuka, diaktifkan, dinyahaktifkan, dll. Hari ini, kami ingin menulis kod dalam acara BeforePrint, jadi pilih BeforePrint dari menu dropdown yang betul.

Perhatikan bahawa setiap kali anda memilih sesuatu dari dropdown yang betul, editor VBA menulis baris kod awal dan akhir ke dalam modul kod untuk anda. Kali pertama anda menukar menu lungsur kiri ke Buku Kerja, anda mungkin menerima permulaan subrutin Workbook_Open secara lalai. Sekiranya anda tidak akan menulis prosedur Workbook_Open, anda harus mempertimbangkan untuk menghapus prosedur kosong ini.

Sekarang, untuk menulis kod VBA. Terdapat beberapa pemboleh ubah berguna yang boleh anda gunakan.

  • ActiveWorkbook.Path akan mengembalikan laluan buku kerja. Nampaknya "C: My Documents MrExcel".
  • ActiveWorkbook.FullName akan mengembalikan laluan dan nama fail buku kerja. Nampaknya "C: My Documents MrExcel Tip055 Sample.xls".

Anda boleh menetapkan pemboleh ubah ini menjadi satu dalam salah satu daripada 6 kedudukan berikut:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Berikut adalah tiga kemungkinan makro sampel.

Makro ini akan menambah jalan dan nama fail sebagai kaki kanan lembaran kerja aktif:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

Makro ini akan menambah jalan sebagai tajuk kiri Sheet1 dan sebagai footer tengah Sheet2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

Sekiranya anda cenderung menggunakan pilihan "Seluruh Buku Kerja" semasa mencetak, versi ini akan menambahkan nama penuh sebagai footer tengah ke semua helaian:

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Follow one of these examples or create one of your own. When you are finished, close the VBA editor with File> Close and Return to Microsoft Excel.

Anytime that you print a worksheet, the code will run and insert the current path into the appropriate header or footer that you indicated in the VBA code.

Some notes and cautions:

  • Novice Excel users will have little idea that this code is in the workbook. When they open the workbook, they may get the security warning that the file contains macros, but there will be no warning when the VBA code whacks whatever they had as the center footer and puts the pathname there. This can lead to heartburn. Imagine 5 years from now someone is using your workbook and the new manager wants the filename to move from the center footer to the right footer. This person may know to manually change the settings in File> PageSetup, but if they do not know the code is there, it will drive them batty as the code continually changes their footers back.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Apabila ralat berlaku dalam makro, peristiwa tidak dapat dihidupkan kembali. Apabila ini berlaku, terdapat sedikit amaran. Sekiranya anda mengesyaki bahawa pengendali acara anda tidak dilaksanakan, pergi ke editor asas visual. Tekan Ctrl + g untuk memunculkan panel segera. Di panel segera, taip:

    Print Application.EnableEvents

    dan tekan enter. Sekiranya anda mendapati bahawa ini diatur ke False, kemudian ketik baris berikut di panel segera:

    Application.EnableEvents = True

    dan tekan enter.

Terima kasih kepada Donna untuk soalan yang hebat. Dalam proses menjelaskan jawapannya, ini adalah peluang besar untuk mengembangkan konsep Pengendali Acara di VBA.

Artikel menarik...