Frage an excel-vba, excel, excel-vba-mac, vba – Fehler beim Schließen einer geöffneten Arbeitsmappe in VBA-Benutzerformular

6

In einer Unterroutine möchte ich eine Arbeitsmappe öffnen, lesen und schließen.
Aus irgendeinem Grund erhalte ich einen Fehler:

Run-time error '1004':

Method 'Close' of object _Workbook failed

Ich habe ein minimales Code-Snippet identifiziert, um das Problem zu reproduzieren.
Erstellen Sie eine neue Excel-Datei. Erstellen Sie darin ein Benutzerformular. Erstellen Sie daraufhin eine Befehlsschaltfläche mit dem folgenden Click-Ereigniscode:

Private Sub CommandButton1_Click()
    Dim filename As String
    Dim opened_workbook As Workbook

    filename = Application.GetOpenFilename()    ' User selects valid Excel file
    Set opened_workbook = Application.Workbooks.Open(filename)
    ' File operations would occur here
    opened_workbook.Close    ' Exception thrown here

    MsgBox "If you got here, it worked!"
    Unload Me
End Sub

Was mich wirklich verwirrt ist, dass dieser Fehler nicht mit demselben Code auftritt, wenn sich die Befehlsschaltfläche nicht in einem Benutzerformular befindet (auf einer einfachen Schaltfläche direkt im Arbeitsblatt).

Ich weiß nicht einmal, was ich sonst noch melden oder wo ich nachsehen soll, um dieses Verhalten zu erklären (außer StackOverflow!). Ich schreibe VBA mit Excel für Mac 2011 und kann auf Windows Excel 2010 umsteigen, wenn es einen Unterschied macht.

Darn :( Ich nehme an, ich sollte es jetzt selbst unter Windows testen. Ich würde jedoch gerne eine Lösung sehen, die sowohl für Windows als auch für Mac funktioniert. Prashant Kumar
FWIW, Ihr Code scheint unter Windows Excel 2010 mit einem Benutzerformular (und auch als normaler Code) für mich zu funktionieren. stephan

Deine Antwort

2   die antwort
0

er Windows funktioniert), nur der Fehler trat in einem Modul-Sub auf, das von der UserForm aufgerufen wurde. Wenn jemand (wie ich) versucht, die workbook.close-Methode von einer Unter- / Funktion in einem Modul (oder einem anderen Speicherort) zu verwenden, der sich nicht in der UserForm selbst befindet, können Sie "Ich" nicht verwenden. 'Ich' kann nur im UserForm-Code selbst verwendet werden.

Verwenden Sie anstelle von "Entlade mich" die Entladefunktion und den Namen Ihres Benutzerformulars.

Unload UserFormName
7

in Excel 2011 handelt es sich um einen Fehler (Undokumentiert - Ich habe noch keine Dokumentation dafür gefunden). Sie müssen den Code leicht ändern. Versuche dies

Private Sub CommandButton1_Click()
    Dim filename As String
    Dim opened_workbook As Workbook

    filename = Application.GetOpenFilename()    ' User selects valid Excel file
    Set opened_workbook = Application.Workbooks.Open(filename)

    Unload Me

    opened_workbook.Close    

    MsgBox "If you got here, it worked!"
End Sub
Was für ein dummer Käfer. Bewegte dieUnload Me unter demDim Aussagen und es funktioniert. Vielen Dank! (Ich habe auch einige hinzugefügtScreenUpdating = False/True Linien, um es ein wenig zu glätten). Prashant Kumar

Verwandte Fragen