2016-12-20 3 views
1

Ich erstelle eine Excel-Datei mit Befehlsschaltflächen, Benutzerformularen usw., die Verknüpfungen zu anderen Arbeitsmappen enthalten.Schließen der geöffneten Excel-Arbeitsmappe nicht möglich

Für die Befehlsschaltflächen auf meinem Blatt verwende ich den gleichen Code wie für die Command in meinem Userforms:

workbooks.open "path" 

mit dem Benutzerformular Command dies ater wird folgendes

unload me 

hinzugefügt Wenn ich öffnen Eine Arbeitsmappe über ein Benutzerformular kann ich später nicht schließen. Ich muss zuerst meine Arbeitsmappe aktivieren, dann die geöffnete und dann kann ich sie schließen

Ich habe versucht, "entläd mich" vor und nach der "workbooks.open", aber das ändert nichts.

Ich habe auch versucht die followin, funktionierte auch nicht:

unload me 
dim wb as workbook 
set wb = workbooks.open"pathname" 
wb.activate 

jemand irgendwelche Ideen?

Beispiel, wie es jetzt ist: Jemand muss eine Preisberechnung vornehmen. Sie öffnen die Preise Benutzerformular in meiner Datei. Sie klicken auf den Button "Berechnungsdatei". Die Berechnungsdatei öffnet sich. Sie machen dort Berechnung und jetzt sind sie in der Berechnungsdatei fertig. Sie wollen es also schließen, indem Sie auf das Kreuz klicken. Aber sie können nicht auf das Kreuz klicken. dann wechseln sie zu meiner Datei in der Taskleiste und wechseln dann zurück zur Berechnungsdatei. Jetzt können sie das Kreuz klicken

Ich verstehe nicht, warum sie nicht das erste Mal klicken können, aber sie können es nach dem Umschalten zwischen mir und der geöffneten Arbeitsmappe klicken.

+1

Ich sehe keinen Code, wo Sie versuchen, eine Arbeitsmappe hier zu schließen ...... – Sorceri

+0

Ich spreche über das Schließen durch Klicken auf das Kreuz. Ich öffne Arbeitsmappen mit Informationen und nachdem jemand die Informationen gesehen hat, die sie brauchen, wollen sie das Arbeitsbuch wieder schließen. aber mit meinem Code müssen Sie zwischen Arbeitsmappen wechseln, bevor Sie auf das Kreuz klicken können – Mick17

+0

Ich habe keine Ahnung, was das verursachen würde, aber Sie wissen, dass 'workbooks.Open' Methode eine neue * aktive * Arbeitsmappe setzt, also Ihre' wb. Activate' statement macht nichts extra. Fügen Sie 'ThisWorkbook.Activate' direkt vor dem' wb.Activate' ein und sehen Sie, ob das die Lösung hackt. –

Antwort

0

Unload betrifft nur eine UserForm.

Versuchen einen Verweis auf die geöffnete Arbeitsmappe hinzufügen und es dann zu schließen, wie so:

dim wb as Workbook 
set wb = Workbooks.Open "pathname" 
wb.activate 
' do whatever with it while it's open 
wb.Close 

Wenn alles, was Sie tun, nicht automatisiert ist, können Sie auf eine Schaltfläche auf dem Formular müssen, die den Verweis auf die gesetzt wird Arbeitsmappe und schließen Sie sie, sobald der Benutzer die Bearbeitung abgeschlossen hat.

+0

Als Sie für Ihre Hilfe, aber ich denke, meine Frage ist nicht klar genug. Ich möchte in den Arbeitsmappen, die ich öffne, nichts ändern. Wir arbeiten mit vielen verschiedenen Excel-Dateien, die sich alle an verschiedenen Orten befinden. Ich erstelle eine Excel-Datei, mit der Sie die Dateien öffnen können, die Sie tatsächlich benötigen. Sehen Sie es als eine "verbindende" Datei an. Wenn ich eine Arbeitsmappe über meine Arbeitsmappe öffne, muss ich zwischen Arbeitsmappe und geöffneter Arbeitsmappe wechseln, bevor ich die geöffnete Arbeitsmappe schließen kann, indem ich auf das Kreuz klicke. – Mick17

+0

Sie möchten also auf eine Schaltfläche klicken, um eine Arbeitsmappe zu öffnen, dann das Benutzerformular ausblenden und anzeigen neu geöffnete Arbeitsmappe? Und wenn der Benutzer die Arbeitsmappe manuell schließt, soll das Benutzerformular erneut angezeigt werden oder so? – Dave

+0

Zum Beispiel: Jemand benötigt die Datei, um einen Preis zu berechnen. Sie öffnen die Preise Benutzerformular in meiner Datei. Sie klicken auf den Button "Berechnungsdatei". Die Berechnungsdatei öffnet sich. Sie machen dort Berechnung und jetzt sind sie in dieser Datei fertig. Sie möchten diese Datei wieder schließen, indem Sie auf das Kreuz klicken, aber jetzt können sie nicht auf das Kreuz klicken. Sie müssen zu meiner Datei wechseln, zurück zur Berechnungsdatei wechseln und jetzt können sie auf das Kreuz klicken. Ich verstehe nicht, warum sie das erste Mal nicht klicken können, aber sie können es anklicken, nachdem sie zwischen Arbeitsmappen gewechselt haben – Mick17

0

Wenn Sie die Arbeitsmappen definieren, die Sie als Variable öffnen, können Sie sie problemlos schließen. Beachten Sie, dass die Arbeitsmappe nicht gespeichert wird.

Dim DataBook As Workbook 
Set DataBook = Workbooks.open ("pathname") 
' Do something useful with the file 

DataBook.Close 
+0

Als Sie für Ihre Hilfe, aber ich denke meine Frage ist nicht klar genug. Ich möchte in den Arbeitsmappen, die ich öffne, nichts ändern. Wir arbeiten mit vielen verschiedenen Excel-Dateien, die sich alle an verschiedenen Orten befinden. Ich erstelle eine Excel-Datei, mit der Sie die Dateien öffnen können, die Sie tatsächlich benötigen. Sehen Sie es als eine "verbindende" Datei an. Wenn ich eine Arbeitsmappe über meine Arbeitsmappe öffne, muss ich zwischen meiner Arbeitsmappe und der geöffneten wechseln, bevor ich die geöffnete Arbeitsmappe schließen kann, indem ich auf das Kreuz klicke – Mick17

0

Es ist nicht ganz klar, was Sie hier fragen versuchen, aber ich werde es bei der Bereitstellung von Ihnen eine volle Antwort mein Bestes geben. Wenn Sie mit der Unload Me-Anweisung keinen Erfolg haben, wenn es darum geht, ein Benutzerformular zu schließen, versuchen Sie, den vollständigen Formularnamen in VBA anzugeben.Das heißt:

Unload UserFormName 

Wenn Sie versuchen, die Arbeitsmappe zu schließen Sie (über das Benutzerformular) geöffnet haben, können Sie die Workbooks.Close Methode verwenden:

Dim wb as Workbook 
Set wb = Workbooks.Open(Filename:="C:\example.xls") 
wb.Activate 
'Close workbook 
wb.Close 
'Unload form 
Unload ExampleForm 

Mehr über die Verwendung der Unload-Anweisung finden Sie hier: - https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx

Und mehr über die Verwendung der Workbooks.Close Anweisung finden Sie hier: - https://msdn.microsoft.com/en-us/library/office/ff838613.aspx

1

Ich vermute, dass dies auf eine fehlerhafte Formularverarbeitung zurückzuführen ist und dass die "Standardinstanz" sich nach dem Entladen neu erstellt. Wenn Sie Ihre eigene Instanz des Formulars nicht erstellen, bevor Sie es zeigen, wird VBA alle Arten von skurrilen Dingen tun, wenn Sie es verwenden, nachdem es entladen ist.

Wenn Sie nur eine Arbeitsmappe öffnen und das Formular entladen müssen, * erhöhen Sie nicht die Referenzzahl der Arbeitsmappe, bevor Sie das Formular entladen. Versuchen Sie auch nicht, anderen Code auszuführen, nachdem Sie Unload Me von dem Formular aufrufen. Der Code, den Sie geschrieben sollte einfach sein:

Workbooks.Open "pathname" 
Unload Me 

Natürlich ist die Berufung Code für das Formular ist nicht in der Frage, aber es kann wahrscheinlich auch dort gelöst werden.

+0

Vielen Dank für die Informationen, die ich sehen werde, wenn ich damit arbeiten kann. Der aufrufende Code ist einfach: userform1.show – Mick17

0

Ich bin mir nicht sicher, was das beschriebene Verhalten verursacht (es ist unmöglich, im aktiven Excel-Fenster auf die Schaltfläche "Schließen" zu klicken). Jedoch Ihre aktuelle Workflow ist:

  1. Benutzer mit Form interagiert zu überprüfen/Zugriff auf eine Datei
  2. Benutzer klickt auf eine Schaltfläche auf dem Formular, das die Form
  3. Benutzer leert dann manuell schließt aus der Datei erwartet werden geöffnet in (1)

Eine bessere Lösung die dritte Stufe zu entfernen wäre, und schließen Sie das Arbeitsbuch von einem der Ereignisbehandlungsroutinen des Formulars (oder UserForm_QueryCloseUserForm_Terminate). Alternativ können Sie dies zu einem CommandButtonClick Ereignis hinzufügen, aber das ist nicht sehr unterschiedlich, als den Benutzer erforderlich, die Datei manuell zu schließen.

Dies könnte so einfach sein wie:

Private Sub UserForm_Terminate() 
' should be called when form Unloads 
On Error Resume Next 
Workbooks.Close "filename.xlsx" 
End Sub 

Auf diese Weise wird die Datei der Benutzer schließt jederzeit geschlossen werden oder auf andere Weise entlädt die Userform.

Verwandte Themen