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

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

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

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 ;-)

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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge