ID Artikel: 280454 - Kajian Terakhir: 23 September 2011 - Revisi: 2.0

Prompt password untuk projek VBA muncul setelah Excel berhenti

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

GEJALA

Setelah menjalankan makro yang melewati referensi untuk buku kerja yang mengandung dilindungi sandi projek VBA untuk ActiveX dynamic-link perpustakaan (DLL), Anda diminta untuk sandi proyek VBA ketika Excel berhenti.

PENYEBAB

Masalah ini terjadi jika ActiveX DLL tidak benar melepaskan referensi ke buku kerja yang berisi VBA dilindungi sandi proyek.

PEMECAHAN MASALAH

Untuk memperbaiki masalah ini, desain kelas di ActiveX DLL sehingga referensi buku kerja dengan benar dirilis sebelum kelas mengakhiri.

Skenario yang umum di mana kelas Mengakhiri acara tidak api adalah salah satu di mana Anda memiliki referensi melingkar antara objek. Referensi melingkar akan dibuat jika, misalnya, objek orangtua menciptakan anak objek dan tangan anak objek referensi untuk orangtua. Jika anak referensi untuk orangtua tidak dirilis, orangtua objek tidak akan berakhir.

Langkah-langkah di bagian berikut menunjukkan bagaimana referensi melingkar antara objek mungkin terjadi dan bagaimana password prompt akan muncul jika objek berpegang referensi untuk dilindungi buku kerja ketika Excel berhenti. Resolusi, yang adalah untuk memanggil metode untuk salah satu objek untuk memecahkan melingkar referensi sehingga objek dapat mengakhiri, juga dijelaskan di bawah ini.

INFORMASI LEBIH LANJUT

Langkah-langkah untuk mereproduksi perilaku

  1. Dalam Visual Basic, membuat yang baru ActiveX DLL proyek. Mengubah nama proyek untuk ExcelTest.
  2. Mengubah nama Class1 untuk ParentClass Kemudian tambahkan kode berikut untuk ParentClass:
    Option Explicit
    
    Private oChild As ChildClass
    Private WorkbookRef As Object
    
    Private Sub Class_Initialize()
       Set oChild = New ChildClass
       Set oChild.Parent = Me
    End Sub
    
    Private Sub Class_Terminate()
       Set oChild.WorkbookRef = Nothing
       Set oChild.Parent = Nothing
       Set oChild = Nothing
       MsgBox "ParentClass Terminate Event"
    End Sub
    
    Public Sub Clear()
        Set oChild.Parent = Nothing
    End Sub
    
    Public Sub SetWorkbook(o As Object)
        Set WorkbookRef = o
        Set oChild.WorkbookRef = o
    End Sub
    					
  3. Menambahkan modul kelas lain, nama ChildClass, dan kemudian tambahkan kode berikut untuk ChildClass:
    Public Parent As ParentClass
    Public WorkbookRef As Object
    					
  4. Membangun "ExcelTest.dll".
  5. Buat buku kerja baru di Microsoft Excel. Tekan ALT + F11 untuk Buka Editor Visual Basic.
  6. Dari Masukkan menu, klik UserForm menambah userform baru ke projek VBA.
  7. Dari Masukkan menu, klik Modul untuk menambahkan modul baru untuk projek VBA. Tambahkan kode berikut untuk modul baru:
    Public o As Object
    Sub MyMacro()
        UserForm1.Show
        Set o = CreateObject("ExcelTest.ParentClass")
        o.SetWorkbook ThisWorkbook
        'o.Clear  '<=== Remove comment to demonstrate the workaround.
        Set o = Nothing
    End Sub
    					
  8. Dari Alat menu, pilih VBAProject properti. Pada kotak dialog yang muncul, klik Perlindungan tab. Klik untuk memilih Kunci proyek untuk melihat. Menyediakan password dan klik Oke.
  9. Simpan buku kerja dan menutupnya.
  10. Sekarang, untuk mereproduksi masalah dengan sandi proyek VBA muncul ketika Excel berhenti:
    1. Membuka buku kerja yang Anda simpan pada langkah 9.

      Di Microsoft Office Excel 2007, jika Anda diminta dengan peringatan keamanan yang menunjukkan bahwa macro telah dinonaktifkan, klik Opsi. Dalam Keamanan kotak dialog, klik Mengaktifkan konten ini, lalu klik Oke.
    2. Lakukan salah satu dari tindakan berikut ini:
      • Di Excel 2007, klik Makro dalam Kode kelompok pada Pengembang tab. Jika Pengembang tab tidak [[telinga, klik Microsoft Office tombol, klik Excel pilihan, klik Populer, klik untuk memilih Tampilkan Tab pengembang di pita Periksa kotak, dan kemudian klik Oke.
      • Di Microsoft Office Excel 2003 atau versi Excel sebelumnya, klik Makro pada Alat menu, dan kemudian klik Makro.
    3. Pilih MyMacro dalam daftar, dan kemudian klik Menjalankan.
    4. Mengabaikan userform yang makro menampilkan.
    5. Keluar dari Microsoft Excel.
    6. Anda diminta untuk sandi proyek VBA ketika Excel berhenti.
Ketika Anda menggunakan langkah-langkah di atas untuk mereproduksi masalah, catatan yang Mengakhiri acara untuk ParentClass kelas api tidak bahkan setelah mengatur objek di Excel makro untuk Tidak ada. (Dengan tidak adanya MessageBox dengan pesan "ParentClass Mengakhiri acara"menunjukkan bahwa acara ini memang tidak api.)

Untuk memperbaiki masalah sehingga referensi ke buku kerja Excel dengan benar dirilis, menghapus komentar dari garis yang ditunjuk di Excel makro, Simpan makro, dan kemudian mengulang tes. Ketika referensi buku kerja dengan benar dirilis, objek Mengakhiri acara akan api dan Anda tidak akan diminta untuk VBA proyek sandi ketika Excel berhenti.

Berlaku bagi:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Kata kunci: 
kbexpertisebeginner kbprb kbmt KB280454 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:280454  (http://support.microsoft.com/kb/280454/en-us/ )