AW: Wechsel zwischen 2 Excelsheets
26.03.2014 12:22:17
fcs
Hallo ANNAnas,
leider funktioniert das auch nicht.
Sobald eine Datei mit Workbook_Open-Ereignis von einer anderen Datei geöffnet wird übernimmt das Makro in der geöffneten Datei das Kommando und das Ursprungsmakro wird nicht weiter ausgeführt. In deinem Fall funktioniert dann das Schließen der 2. Datei nicht mehr.
Ich hab jetzt aber doch noch einen Weg gefunden.
Die 2. Datei startet vor dem Schliessen in der Start.xlsm ein Makro das per OnTime-Anweisung dafür sorgt, dass das Userform1 in der Start.xlsm zeitverzögert (1 Sekunde) wieder angezeigt wird.
Dazu musst du einige Code-Anpassungen machen.
Für das Userform1 in der Start.xlsm sind sie Beispielhaft.
Hier ist wichtig, dass das Userform per Hide ausgeblendet wird und der Name der zu öffnenden Datei in die Tag-Eigenschaft des Userforms geschrieben wird - alternativ ginge auch eine Textbox in die der Name eingetragen wird.
Gruß
Franz
Datei Start.xlsm
'Code unter "DieseArbeitsmappe" von Datei Start.xlsm
Option Explicit
Private Sub Workbook_Open()
Call UserformAnzeigen
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Visible = True
End Sub
'Code in einem allgemeinen Modul von Datei Start.xlsm
Option Explicit
Sub UserformAnzeigen()
'Userform1 anzeigen und ggf. gewählte Datei öffnen
Dim strDatei As String
Application.Visible = False
With UserForm1
.Show
strDatei = .Tag
End With
Unload UserForm1
If strDatei "" Then
'Im Userform gewählte Datei öffnen
Application.Workbooks.Open FileName:=strDatei
End If
'Der Code ab hier wird nur ausgeführt wenn im Userform1 die Abbrechen-Schaltfläche _
geklickt wurde
Application.Visible = True
End Sub
Sub AktivierenStart_xlsm()
'Dieses Makro wird von der anderen Datei aus gestartet, um nach dem _
Speichern und Schliessen das Userform wieder anzuzeigen
Application.OnTime Earliesttime:=Now + TimeSerial(0, 0, 1), _
Procedure:="UserformAnzeigen", _
LatestTime:=Now + TimeSerial(0, 0, 10)
End Sub
'Beispiel-Code unter "Userform1" von Datei Start.xlsm
'Userform mit 2 Schaltflächen
' - CommandButton1 = Dateiauswahl
' - CommandButton1 = Abbrechen
Option Explicit
Private Sub CommandButton1_Click()
Dim varAuswahl
'Auswählen und Öffnen der Datei
varAuswahl = Application.GetOpenFilename(Filefilter:="Excel (*.xls*),*.xls*")
If varAuswahl False Then
'Über die Tag-Eigenschaft der Schaltfläche wird der Dateiname an die _
Hauptprozedur übergeben
Me.Tag = varAuswahl
Me.Hide
Else
Me.Tag = ""
End If
End Sub
Private Sub CommandButton2_Click()
'Abbrechen-Button
Me.Tag = ""
Me.Hide
End Sub
Private Sub UserForm_Initialize()
'Userform-Größe an Fenstergröße der Excelanwendung anpassen
With Me
.StartUpPosition = 0 'Manuell
.Left = Application.Left
.Top = Application.Top
.Height = Application.Height
.Width = Application.Width
End With
End Sub
2. Datei
'Code unter DieseArbeitsmappe der 2. Datei
Option Explicit
Private Sub Workbook_Open()
On Error Resume Next
UserForm1.Show
Application.Visible = True
Run "Start.xlsm!AktivierenStart_xlsm"
ThisWorkbook.Close savechanges:=True
End Sub
'Code unter Userform1 in der 2. Datei
'Speichern- und Beenden-Schaltfläche
Private Sub CommandButton4_Click()
'hier wird geprüft, ob in der Textbox25 einen Wert enthält der > 0 und nicht leer ist
If TextBox25.Value = "" Or TextBox25.Value = "0" Then
MsgBox "Das Feld Prüfer muss gefüllt werden um fortzufahren!"
Exit Sub
'die Sub wird verlassen, ohne das die Userform geschlossen wird!
End If
ThisWorkbook.Save
Unload Me
End Sub