Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wechsel zwischen 2 Excelsheets

Forumthread: Wechsel zwischen 2 Excelsheets

Wechsel zwischen 2 Excelsheets
24.03.2014 10:02:11
ANNAnas
Guten Morgen Elite!
Ich habe ein kleines Problem mit dem wechsel zwischen 2 Excelsheets...
Wenn ich die erste öffne, öffnet sich automatisch die userform, womit es möglich ist, ein anderes Sheet zu öffnen. DIeses wir auch in einer Userform geöffnet. Möchte ich aber auf die URsprungsdatei zurückkehren, dann sehe ich lediglich das Sheet und muss die Userform manuell starten....
Kann mir jemand helfen?! DAAAAAAAAANKE :)

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wechsel zwischen 2 Excelsheets
24.03.2014 10:46:16
fcs
Hallo ANNAnas,
die Anweisung zur Anzeige der Userforms steht bei dir im VBA-Editor wahrscheinlich unter "DieseArbeitsmappe in der Prozedur "Private Sub Workbook_Open()"
ändere diese in
"Private Sub Workbook_Activate()"
Falls das nicht funktioniert, dann werden mehr Informationen über die Makros in den Dateien benötigt.
Gruß
Franz

Anzeige
AW: Wechsel zwischen 2 Excelsheets
24.03.2014 10:55:44
ANNAnas
Hey Franz,
danke für die shcnelle Antwort. Doch leider bringt mich dein Ansatz nicht weiter.
In der Start.xlms steht folgender Code:
-> Diese Arbeitsmappe:
Private Sub Workbook_Activate() 'Userform wird sofort gestartet
Application.Visible = False
UserForm1.Show
End Sub
In der 2. Datei.xlms:
--> Diese Arbeitsmappe:
Private Sub Workbook_Open() 'Userform wird sofort gestartet
UserForm1.Show
End Sub
--> Userform
'Beenden Schaltfläche Ereignisroutine

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
Application.Visible = True
ThisWorkbook.Close
End Sub

Anzeige
AW: Wechsel zwischen 2 Excelsheets
24.03.2014 17:26:48
fcs
Hallo ANNAnas,
grundsätzlich funktioniert es so.
Allerdings kommt es durch Zeile
ThisWorkbook.Close
im Makro der 2. Datei zu irgendwelchen nicht abgeschlossenen Aktionen oder Rückkopplungsaktionen, die verhindern, dass die Aktivierungs-Ereignisprozedur in Datei Start.xlsm korrekt ausgeführt wird.
Läßt man die Zeile weg und schließt die 2. Datei von Hand, dann wird die Userform korrekt angezeigt.
Ich hab jetzt verschiedenste Sachen ausprobiert. Es ist mir aber nicht gelungen, die 2. Datei per Makro nach dem Speichern auch zu schließen, und dann das Userform1 in der Start.xlsm automatisch wieder anzuzeigen.
Wahrscheinlich wird es am einfachstn, in dem Tabellenblatt von Start1.xlsm eine Schaltfläche einzubauen, mit der die Anzeige des Userforms gestartet werden kann.
Gruß
Franz

Anzeige
AW: Wechsel zwischen 2 Excelsheets
25.03.2014 14:01:23
ANNAnas
Hallo Franz,
danke für deine Mühe. Die Schaltfläche hatte ich bereits implementiert und es würde auch so funktionieren wie du es beschreibst.
Wäre es nicht auch möglich, das man in der 2.Datein explizit die start.xlsm einfügt? Sprich beim wechsel auf die 2.Datei wird die start.xlsm geschlossen und wenn man auf dann dieses Ereignis
'Beenden Schaltfläche Ereignisroutine

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 dass das Userform geschlossen wird!
End If
ThisWorkbook.Save
' ThisWorkbook.SaveAs "C:\Sicher\" & ThisWorkbook.Name
Application.Visible = True
ThisWorkbook.Close
End Sub
aufruft man die start.xlsm wieder von neuen öffnet...
Ist das möglich?
MfG

Anzeige
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

Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige