Artikel-ID: 176251 - Geändert am: Donnerstag, 22. September 2005 - Version: 1.1

XL97: WorkBookBeforeClose-Ereignis wird unerwartet ausgelöst

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie eine Visual Basic für Applikationen-Makro, verwenden um eine Formel in einem Microsoft Excel-Arbeitsblatt zu aktualisieren, kann das WorkbookBeforeClose-Ereignis ausgelöst.

Ursache

Dieses Problem kann auftreten, wenn folgende Bedingungen erfüllt sind:

  • Das Makro wird von zwei oder mehr Excel-Arbeitsmappen aktualisiert, die in ein anderes Programm (z. B. Microsoft Word) eingefügt wurden. -und-

  • Das Makro aktualisiert eine Formel, die OLE-Verknüpfung zwischen der Excel-Arbeitsmappen darstellt. -und-

  • Sie haben einen Anwendungsebene Ereignishandler für das WorkbookBeforeClose-Ereignis erstellt.

Lösung

Um dieses Problem zu beheben, beziehen Sie Microsoft Excel 97 Service Release 2 (SR-2).

Weitere Informationen zu SR-2 finden Sie in der folgenden Artikel der Microsoft Knowledge Base:
151261  (http://support.microsoft.com/kb/151261/EN-US/ ) OFF97: So erhalten und installieren Sie Microsoft Office 97 SR-2

Status

Microsoft hat dies ein Problem in Microsoft Excel 97 für Windows bestätigt. Dieses Problem wurde in Microsoft Office 97 Service Release 2 (SR-2) behoben.

Weitere Informationen

Beispiel des Problems

Die folgenden Schritte veranschaulichen das Problem zu reproduzieren.

Erstellen des Ereignishandlers WorkbookBeforeClose

  1. Starten Sie Excel.
  2. Wenn Sie persönliche Makroarbeitsmappe (Personal.xls) nicht haben, veranschaulichen die folgenden Schritte erstellen. Fahren Sie mit Schritt 3 fort, wenn Sie bereits persönliche Makroarbeitsmappe verfügen.

    1. Im Menü Extras auf Makro, und klicken Sie dann auf aufzeichnen.
    2. Klicken Sie in das Feld im auf Persönliche Makro-Arbeitsmappe, und klicken Sie dann auf OK.
    3. Im Menü Extras auf Makro, und klicken Sie dann auf Aufzeichnung beenden.
  3. Drücken Sie [Alt]+[F11], um den Visual Basic-Editor zu starten.
  4. Drücken Sie STRG + R, um im Explorer Projekt aktivieren.
  5. Klicken Sie im Projektexplorer-Fenster auf "VBAProject (Personal.xls)."
  6. Klicken Sie im einfügen auf Klassenmodul um ein Klassenmodul einzufügen.
  7. Geben Sie den folgenden Code in das Klassenmodul:
         Public WithEvents App As Application
         Private Sub App_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _
         Cancel As Boolean)
    
            MsgBox "App_WorkbookBeforeClose"
    
         End Sub
    						
  8. Doppelklicken Sie im Projektexplorer von Visual Basic-Editor im aktuellen Projekt auf ThisWorkbook.
  9. Geben Sie in das ThisWorkbook Modulblatt den folgenden Code:
         Dim X As New Class1
         Private Sub Workbook_Open()
    
            Set X.App = Application
    
         End Sub
    						
  10. Klicken Sie im Menü Einfügen auf Modul, um ein Visual Basic-Modulblatt einzufügen.
  11. Geben Sie in das Modulblatt den folgenden Code:
         Sub Test_BeforeClose()
    
            Dim xFormula As String, i As Integer, j As Integer
    
            Windows("Worksheet in BeforeCloseTest.Doc").Activate
    
            i = Workbooks("Worksheet in BeforeCloseTest.Doc 2") _
               .Worksheets("Sheet1").Range("A100").End(xlUp).Row + 1
    
            Range("A1").Name = "RefCopy" & I
    
            Range("A1").Copy
    
            Windows("Worksheet in BeforeCloseTest.Doc 2").Activate
    
            Range("A" & i).Select
    
            ActiveSheet.Paste Link:=True
    
            xFormula = ActiveCell.Formula
    
               For j = Len(xFormula) To 1 Step -1
    
                  If Mid(xFormula, j, 1) = "!" Then Exit For
    
               Next j
    
            ActiveCell.Formula = Left(xFormula, j) & "RefCopy" & i & "'"
    
         End Sub
    						
  12. Klicken Sie im Menü Datei auf "Schließen & zurückkehren zu Microsoft Excel".
  13. Klicken Sie im Menü Datei auf Beenden. Klicken Sie auf Ja, wenn Sie aufgefordert werden, um die Änderungen in der persönlichen Makro-Arbeitsmappe zu speichern.

Excel-Objekte in einem Word-Dokument einfügen

  1. Starten Sie Word.
  2. Klicken Sie im Menü Einfügen auf Objekt. Klicken Sie auf Microsoft Excel-Arbeitsblatt in das Feld Objekttyp, und klicken Sie dann auf OK.

    Ein Excel-Arbeitsblatt-Objekt wird in Ihr Dokument eingefügt.
  3. Klicken Sie auf das Word-Dokument, Word zu aktivieren.
  4. Klicken Sie im Menü Einfügen auf Objekt. Klicken Sie auf Microsoft Excel-Arbeitsblatt in das Feld Objekttyp, und klicken Sie dann auf OK.

    Ein Excel-Arbeitsblatt-Objekt wird in Ihr Dokument eingefügt.
  5. Klicken Sie auf das Word-Dokument, Word zu aktivieren.
  6. Klicken Sie auf Speichern unter Typ BeforeCloseTest.doc in das Feld Dateiname im Menü Datei und klicken Sie dann auf OK.

Dem Makro ausgeführt, demonstriert das Problem

  1. Klicken Sie mit der rechten Maustaste auf das erste eingebettete Excel-Objekt, zeigen Sie auf Arbeitsblatt-Objekt im Kontextmenü auf, und klicken Sie dann auf Öffnen.
  2. Aktivieren Sie Word.
  3. Klicken Sie mit der rechten Maustaste auf das zweite eingebettete Excel-Objekt, zeigen Sie auf Arbeitsblatt-Objekt im Kontextmenü auf, und klicken Sie dann auf Öffnen.
  4. Zeigen Sie im Menü Extras auf Makro, und klicken Sie auf Makros. Klicken Sie auf Personal.xls!Test_BeforeClose, und klicken Sie auf Ausführen.

    OLE-Verknüpfung ist zwischen Arbeitsmappe von Zelle A1 der "Tabelle in BeforeCloseTest.doc" und Zelle A2 der Arbeitsmappe "Arbeitsblatt in BeforeCloseTest.doc 2" erstellt.
  5. Aktivieren Sie die Arbeitsmappe "Tabelle in BeforeCloseTest.doc".
  6. Geben Sie test in Zelle A1 ein.
  7. Zeigen Sie im Menü Extras auf Makro, und klicken Sie auf Makros. Klicken Sie auf Personal.xls!Test_BeforeClose, und klicken Sie auf Ausführen.
Ein Meldungsfeld wird angezeigt, der angibt, dass das WorkbookBeforeClose-Ereignis ausgelöst hat. Das WorkbookBeforeClose-Ereignis wird jedes Mal ausgelöst, wenn Sie die Test_BeforeClose-Prozedur ausführen.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Excel 97 Standard Edition
Keywords: 
kbmt kbhotfixserver kbqfe kbbug kbprogramming kbqfe KB176251 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 176251  (http://support.microsoft.com/kb/176251/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
 

SPRACHE AUSWÄHLEN