Makale numarası: 280454 - Son Gözden Geçirme: 29 Mart 2007 Perşembe - Gözden geçirme: 5.1

Excel'in çıktıktan sonra VBA projesi parola isteminde görünür.

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Bir makroyu çalıştırma, parola korumalı bir VBA projesi için bir ActiveX dinamik bağlantı kitaplığı (DLL) içeren bir çalışma kitabı için bir başvuru geçtikten sonra Excel'den çıkar, VBA projesi parola sorulur.

Neden

Bu sorun oluşur ActiveX DLL DOSYASı parola korumalı VBA içeren çalışma kitabını referansı düzgün biçimde serbest bırakmıyor proje.

Çözüm

Bu sorunu gidermek için <a0></a0>, bilgisayarınıza ActiveX DLL sınıflarda sınıfları sona erdirmek için önce çalışma kitabındaki başvuruları doğru yayımlanmış şekilde tasarlayın.

Bir <a0>sınıf</a0> terminate olayı değil ateşlenmesine, ortak BIR senaryoda nesneler arasında döngüsel bir başvuru kullandığınız paroladır. Örneğin, bir üst nesnenin alt nesnesi ve ellerinizi oluşturursa, döngüsel bir başvuru oluşturulması, alt, üst başvuru nesnesi. Üst çocuğun başvuru yayımlanırsa, üst nesnenin sonlandırılacak.

Aşağıdaki bölümdeki adımları, nesneler arasında döngüsel başvuru ortaya çıkabilir ve Excel'den çıkar, üzerine korumalı bir çalışma kitabı için bir başvuru nesneleri basılı tutarsanız, parola isteminin nasıl görüneceğini gösterir. Olan bir yöntemi ise nesneleri sona erdirmek, Döngüsel başvuruları ayırmak için nesnelerden birini çağırmak için çözümleme, ayrıca, aşağıda açıklanmıştır.

Daha fazla bilgi

Davranışı yeniden oluşturma adımları

  1. Visual Basic'de ActiveX DLL yeni bir proje oluşturun. Proje için ExcelTest değiştirin.
  2. ParentClass için Class1 adını değiştirin ve sonra da ParentClass için aşağıdaki kodu ekleyin:
    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. Başka bir sınıf modülü Ekle ChildClass olarak adlandırın ve sonra da ChildClass için aşağıdaki kodu ekleyin:
    Public Parent As ParentClass
    Public WorkbookRef As Object
    					
  4. "ExcelTest.dll" oluşturun.
  5. Microsoft Excel'de yeni bir çalışma kitabı oluşturun. Visual Basic Editor'ı açmak için ALT+F11 tuş bileşimine basın.
  6. Ekle menüsünden UserForm VBA projesi için yeni bir userform eklemek için tıklatın.
  7. Ekle menüsünden modülü VBA projesi için yeni bir modül eklemek için tıklatın. Yeni modüle aşağıdaki kodu ekleyin:
    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. Araçlar menüsünden VBAProject özellikler ' i seçin. Görüntülenen iletişim kutusunda koruma sekmesini Görüntüleme için LOCK Project seçmek için Tıklat'i tıklatın. Bir parola girin ve Tamam ' ı tıklatın.
  9. Çalışma kitabını kaydedin ve kapatın.
  10. Şimdi, Excel sonlandırıldığında, VBA projesi parola görüntülenmesini ile sorunu yeniden oluşturmak için:
    1. 9. Adımda kaydettiğiniz çalışma kitabını açın.

      Makroları devre dışı bırakılmış olabileceğini belirten bir güvenlik uyarısı istenirse, Microsoft Office Excel 2007'de, Seçenekler ' i tıklatın. Güvenlik iletişim kutusunda, Bu içeriği etkinleştir ' i tıklatın ve sonra Tamam ' ı tıklatın.
    2. Aşağıdaki eylemlerden birini gerçekleştirin:
      • Excel 2007'de <a0>Geliştirici</a0> sekmesindeki <a1>kod</a1> grubunda makrolar ' ı tıklatın. Geliştirici sekmesindeki yoksa bir [[ear, Microsoft Office düğmesi ' ni tıklatın, Excel Seçenekleri ' ni tıklatın, popüler ' ı tıklatın, Şeritte Geliştirici sekmesini göster</a1> onay kutusunu tıklatıp seçin ve Tamam ' ı tıklatın.
      • Microsoft Office Excel 2003'de veya Excel'in daha önceki bir sürümünde makro, Araçlar menüsünden Seçenekler'i tıklatın ve makrolar ' ı tıklatın.
    3. MyMacro listeden seçin ve sonra da <a2>Çalıştır</a2>'ı tıklatın.
    4. Makro görüntüleyen userform kapatmak.
    5. Microsoft Excel'den çıkın.
    6. Excel'den çıkar, VBA projesi parola sorulur.
Sorunu yeniden oluşturmak için yukarıdaki adımları kullandığınızda, Excel içinde nesne bile ayarladıktan sonra ParentClass sınıfı terminate olayı başlatılmıyor Not Nothing makro. (Bu olay değil ateşlenmesine "Olay ParentClass sonlandır" iletisiyle MessageBox yokluğunu gösterir.)

Excel çalışma kitabına başvuru düzgün olarak serbest bırakılır, sorunu gidermek için <a0></a0>, Excel Makroda belirtilen satır açıklamayı kaldırmak için makroyu kaydetmek ve sonra da belirtilen sınama işlemini yineleyin. Çalışma kitabı başvurusu düzgün olarak serbest bırakılır, nesnenin Terminate olayı harekete ve artık için VBA sorulur Excel'den çıkar, proje parola.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Anahtar Kelimeler: 
kbmt kbexpertisebeginner kbprb KB280454 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:280454  (http://support.microsoft.com/kb/280454/en-us/ )