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

VBA: 2 Instanzen, eine schließen und speichern ...

Forumthread: VBA: 2 Instanzen, eine schließen und speichern ...

VBA: 2 Instanzen, eine schließen und speichern ...
02.08.2013 22:22:19
Bernd
Hallo zusammen,
komme einfach nicht weiter und zwar habe ich folgendes Problem: 1.Mappe offen mit UF, aus der UF öffne ich eine 2te Excelmappe mit folgendem Code ...
Private Sub cmdBaufinanzierung_Click()
    Application.WindowState = xlMinimized
    Me.Hide
    Workbooks.Open "D:\Firma\Vorlagen\BKBaufi.xlsm"
End Sub
Die 2te Mappe schließe ich wie folgt ...
Sub cmdBKBaufi_schließen()
   Dim sPfad As String
   Dim iClick As Integer
   sPfad = "D:\Firma\Backup\"
   With ActiveWorkbook
      .Save
      iClick = MsgBox(prompt:="Möchten Sie eine Sicherungskopie anlegen?", Buttons:=vbYesNo)
      If iClick = vbYes Then
         .SaveCopyAs sPfad & ThisWorkbook.Name
         If iClick = vbNo Then
            Exit Sub
         End If
      End If
   End With
   If Workbooks.Count > 2 Then
      ThisWorkbook.Close
   Else
      Application.Quit
   End If
   ThisWorkbook("BKKunde.xlsm").Activate
   frm_Kundenliste.Show vbModeless
End Sub
Die verbleibende geöffnete Datei soll wieder mit der UF "frmKundenliste" starten. Ich schaffe es einfach nicht. Am Ende im VBACode seht ihr meine Versuche.
Wer kann mir helfen?
Danke schon mal im Voraus!!
Gruß
Bernd

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 02:33:15
fcs
Hallo Bernd,
etwas grundsätzliches:
Sobald eine Datei per VBA-Anweisung geschlossen wird, wird auch das entsprechende Makro abgebrochen, wenn es sich in der Datei befindet. Alles was noch passieren soll muss also vor der Close-Anweisung stehen.
Ich glaube nicht, das dein Makro zum Öffnen von BKBaufi.xlsm eine 2. Instanz von Excel öffnet.
Die Anzeige des Userforms in der BKKunde.xlsm kannst du über das Workbook_Activate-Ereignis steuern.
Dazu sind ein paar Anpassungen/Ergänzungen erforderlich.
Gruß
Franz
in der Datei BKKunde.xlsm
'Code unter Modul DiesArbeitsmappe
Option Explicit
Private Sub Workbook_Activate()
If bolShowUF = True Then
Call Anzeigen_frmKundenliste
End If
End Sub
'Code in einem allgemeinen Modul
Option Explicit
Public bolShowUF As Boolean
Sub Anzeigen_frmKundenliste()
bolShowUF = False
frm_Kundenliste.Show vbModeless
End Sub
'Code im Modul des Userforms frm_Kundenliste
Option Explicit
Private Sub cmdBaufinanzierung_Click()
'Application.WindowState = xlMinimized
Workbooks.Open "D:\Firma\Vorlagen\BKBaufi.xlsm"
Me.Hide
bolShowUF = True
End Sub

in der Datei BKBaufi.xlsm

Sub cmdBKBaufi_schließen()
Dim sPfad As String
Dim iClick As Integer
'   sPfad = "D:\Firma\Backup\"
sPfad = "C:\Users\Public\Test\MyData\"
With ActiveWorkbook
.Save
iClick = MsgBox(prompt:="Möchten Sie eine Sicherungskopie anlegen?", Buttons:=vbYesNo)
If iClick = vbYes Then
.SaveCopyAs sPfad & ThisWorkbook.Name
ElseIf iClick = vbNo Then
Exit Sub
End If
End With
If Workbooks.Count > 2 Then
Workbooks("BKKunde.xlsm").Activate
ThisWorkbook.Close
Else
Application.Quit
End If
End Sub

Anzeige
AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 12:48:25
Muge
Hallo zusammen.
Mehr Frage als Antwort.
Lässt sich diese Aufgabe nicht über das Ereignis der Arbeitsmappe:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
lösen?
Wenn in dieser Routine die schließen Bedingungen abgefragt werden und entsprechend des Ergebnisses die zweite Datei gesteuert wird „=UF-Anzeigen“?
Gruß
Muge

Anzeige
AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 15:08:34
fcs
Hallo Muge, hallo Bernd,
Man kann auch direkt von dem Schliessen-Makro in der 2. Datei (BKBaufi.xlsm) ein Makro in der 2.Datei (BKBafi.xlsm) strten, das das Userform wieder anzeigt. Dann kommt man ohne das Ereignismakro aus.
Wenn sowieso in der 2. Datei ein buttongebundenes Makro vorhanden ist, das diese Datei schliesst, dann muss man nicht unbedingt über das BeforClose-Ereignis die Userform-Anzeige in der 1. Datei starten. Die Ereignisse des Workbooks sind dann nützlich, wenn man ohne Eingriff des Anwenders gezielte Aktionen auslösen möchte.
Gruß
Franz
hier noch das Makro wenn ohne das Workbook_Activate-Ereignis das Usersorm in der 1. Datei wieder angezeigt werden soll. Die Variable
Public bolShowUF As Boolean
wird dann auch nicht mehr benötigt.
Sub cmdBKBaufi_schließen()
Dim sPfad As String
Dim iClick As Integer
sPfad = "D:\Firma\Backup\"
'   sPfad = "C:\Users\Public\Test\MyData\"
With ActiveWorkbook
.Save
iClick = MsgBox(prompt:="Möchten Sie eine Sicherungskopie anlegen?", Buttons:=vbYesNo)
If iClick = vbYes Then
.SaveCopyAs sPfad & ThisWorkbook.Name
ElseIf iClick = vbNo Then
Exit Sub
End If
End With
If Workbooks.Count > 2 Then
Application.Run "BKKunde.xlsm!Anzeigen_frmKundenliste"
ThisWorkbook.Close
Else
Application.Quit
End If
End Sub

Anzeige
AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 17:25:37
Muge
Hallo Franz.
Einleuchtend.
Danke für die Erklärung!
Muge

VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 19:00:03
Bernd
Hallo Franz,
bin ein wenig durcheinander gekommen. Aber nachdem ich dein 1. Beispiel umgesetzt hatte und es nicht funktionierte, habe ich deine letzte Code Version umgesetzt und wieder hakt es.
Folgenden Code habe ich umgesetzt:
im Modul = "mdl_Kundenliste"
Sub Anzeigen_frm_Kundenliste()
   frm_Kundenliste.Show vbModeless
End Sub
Im UF = "frm_Kundenliste"
Private Sub cmdAbbruch_Click()
   Unload Me
   Call cmdBKBaufi_schließen
End Sub

im Modul = "mdl_speichern_und_schließen"
Sub cmdBKBaufi_schließen()
    Dim sPfad As String
    Dim iClick As Integer
    sPfad = "D:\Firma\Backup\"
    With ActiveWorkbook
       .Save
       iClick = MsgBox(prompt:="Möchten Sie eine Sicherungskopie anlegen?", Buttons:=vbYesNo)
       If iClick = vbYes Then
          .SaveCopyAs sPfad & ThisWorkbook.Name
       ElseIf iClick = vbNo Then
           Exit Sub
       End If
    End With
    If Workbooks.Count > 2 Then
       Application.Run "BKKunde.xlsm!Anzeigen_frm_Kundenliste"
       ThisWorkbook.Close
    Else
       Application.Quit
    End If
 End Sub
Der Code läuft durch, am Ende habe ich den Eindruch, als wenn sich eine UF öffnen möchte, verschwindet aber gleich wieder, so das nur die Mappe "BKKunde" in der Taskleist minimiert liegt und das war's.
Wo habe ich vielleicht den Fehler eingebaut oder falsch verstanden?
Gruß
Bernd

Anzeige
AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 19:44:39
Stefan
Hallo,
versuche es anstatt mit
Application.Run "BKKunde.xlsm!Anzeigen_frm_Kundenliste"
mal mit
Application.OnTime Now + TimeValue("00:00:01"), "BKKunde.xlsm!Anzeigen_frm_Kundenliste"
Gruß Stefan
PS: Du hättest übrigens eine PN ;-)

Anzeige
VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 19:58:48
Bernd
Hallo Stefan,
Danke für die Hilfe.
Fehlermeldung: Objekterstellung durch activeX-Komponente nicht möglich.
Wat nu?
Gruß
Bernd

AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 20:07:29
Stefan
Hallo Bernd,
welche Codezeile betrifft es?
Gruß Stefan

AW: VBA: 2 Instanzen, eine schließen und speichern ...
03.08.2013 20:19:04
fcs
Hallo Bernd,
ich kann dir jetzt nicht genau sagen, woran es hängt.
Das 1. Makro muss jedenfalls in der Datei BKKunde.xlsm vorhanden sein, in der sich ja auch das wieder einzublenden UF befindet.
Evtl. solltest du das Fenster von BKKunde.xlsm wieder vergrößern bzw. gar nicht erst verkleinern wenn du BKBaufi.xlsm öffnest.
Gruß
Franz

Anzeige
@Muge, Stefan und Franz
05.08.2013 09:36:34
Bernd
Hallo zusammen,
habe mich entschieden, beide Dateien wieder zusammen zu führen. So mit entsteht die jetzige Problematik nicht mehr.
Nochmals ein ganz dickes Danke für eure Hilfe ☺ ☺ ☺
Gruß
Bernd
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Zwei Instanzen von Excel verwalten


Schritt-für-Schritt-Anleitung

Um in Excel mehrere Instanzen zu öffnen und eine zweite Instanz zu verwalten, kannst du die folgenden Schritte befolgen:

  1. Öffne eine erste Instanz von Excel. Dies geschieht normalerweise automatisch, wenn du Excel startest.

  2. Erstelle einen Button in deiner ersten Arbeitsmappe, der ein VBA-Skript ausführt, um eine zweite Instanz zu öffnen.

    Private Sub cmdBaufinanzierung_Click()
       Application.WindowState = xlMinimized
       Me.Hide
       Workbooks.Open "D:\Firma\Vorlagen\BKBaufi.xlsm"
    End Sub
  3. Schließe die zweite Instanz mit einem weiteren Button und einem speziellen VBA-Skript.

    Sub cmdBKBaufi_schließen()
       Dim sPfad As String
       Dim iClick As Integer
       sPfad = "D:\Firma\Backup\"
       With ActiveWorkbook
           .Save
           iClick = MsgBox(prompt:="Möchten Sie eine Sicherungskopie anlegen?", Buttons:=vbYesNo)
           If iClick = vbYes Then
               .SaveCopyAs sPfad & ThisWorkbook.Name
           End If
       End With
       If Workbooks.Count > 2 Then
           ThisWorkbook.Close
       Else
           Application.Quit
       End If
    End Sub
  4. Steuere die Anzeige eines UserForms in der ersten Instanz, nachdem die zweite Instanz geschlossen wurde.


Häufige Fehler und Lösungen

  • Fehler: Objekterstellung durch ActiveX-Komponente nicht möglich
    Dieser Fehler kann auftreten, wenn das UserForm nicht korrekt geladen wird. Stelle sicher, dass der Code in der richtigen Datei vorhanden ist und dass die Datei nicht minimiert ist.

  • Fehler: UserForm öffnet sich nicht oder schließt sofort
    Überprüfe, ob alle notwendigen Variablen und Sub-Prozeduren korrekt definiert sind. Ein falscher Aufruf kann dazu führen, dass das UserForm nicht wie gewünscht angezeigt wird.

  • Problematik mit der Sicherungskopie
    Wenn die Option für die Sicherungskopie nicht benötigt wird, kannst du die Zeilen, die die Sicherungskopie anlegen, auskommentieren oder entfernen.


Alternative Methoden

  • Ereignisse verwenden: Nutze das Workbook_BeforeClose Ereignis, um Bedingungen zu überprüfen und entsprechend die zweite Datei zu steuern.

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       ' Deine Logik hier
    End Sub
  • Verwenden von Application.OnTime: Dies kann nützlich sein, um Zeitverzögerungen einzuführen, bevor eine Aktion ausgeführt wird. Zum Beispiel:

    Application.OnTime Now + TimeValue("00:00:01"), "BKKunde.xlsm!Anzeigen_frm_Kundenliste"

Praktische Beispiele

Öffnen einer zweiten Instanz: Du kannst Excel so programmieren, dass beim Klicken auf einen Button eine zweite Instanz geöffnet wird. Hier ist ein Beispielcode:

Private Sub cmdBaufinanzierung_Click()
    Application.WindowState = xlMinimized
    Me.Hide
    Workbooks.Open "D:\Firma\Vorlagen\BKBaufi.xlsm"
End Sub

Schließen der zweiten Instanz: Wenn du die zweite Instanz schließen möchtest, kannst du den folgenden Code verwenden:

Sub cmdBKBaufi_schließen()
    If Workbooks.Count > 2 Then
        ThisWorkbook.Close
    Else
        Application.Quit
    End If
End Sub

Tipps für Profis

  • Optimierung der Benutzererfahrung: Stelle sicher, dass der Benutzer eine klare Rückmeldung erhält, wenn er eine Sicherungskopie anlegen möchte. Verwende MsgBox für Bestätigungen.

  • Vermeide unnötige Minimierungen: Wenn du die Fenster minimierst, kann es zu Verwirrungen kommen. Halte die Fenster sichtbar, um eine bessere Benutzererfahrung zu gewährleisten.

  • Sicherungskopie Excel ausschalten: Wenn du keine Sicherungskopien erstellen möchtest, kannst du die entsprechenden Codezeilen auskommentieren oder entfernen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Instanzen von Excel öffnen?
Du kannst dies erreichen, indem du verschiedene Excel-Dateien nacheinander öffnest oder ein VBA-Skript verwendest, das eine neue Instanz öffnet.

2. Was passiert, wenn ich eine zweite Instanz schließe?
Wenn du die zweite Instanz schließt, wird die erste nicht automatisch geschlossen, es sei denn, du hast es so programmiert.

3. Wie kann ich die Sicherungskopie in Excel deaktivieren?
Du kannst die Funktion zur Erstellung einer Sicherungskopie im VBA-Code einfach auskommentieren oder entfernen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige