Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1060to1064
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
makro in andere Datei aufrufen
21.03.2009 21:44:25
Alex
Hi
Ich rufe mit dem Code das makro2 in einer anderen Datei auf.
Wie kann ich es erreichen, daß wenn das Makro "makro2" nicht existiert eine Meldung kommt und die Prozedur abgebrochen wird und wenn das Makro vorhanden ist, die erste Datei geschlossen wird, aber die aufgerufene Datei weiter läuft.

Private Sub CommandButton1_Click()
Dim Datei2 As Variant
Datei2 = Application.Dialogs(xlDialogOpen).Show
If Datei2 = False Then Exit Sub
Datei2 = ActiveWorkbook.Name
Application.Run (Datei2 & "!makro2")
End Sub


Für Eure hilfe danke ich
Alex

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: makro in andere Datei aufrufen
21.03.2009 22:14:44
Tino
Hallo,
versuche es mal so.
Option Explicit

Private Sub CommandButton1_Click()
Dim Datei2 As String

Datei2 = Application.Dialogs(xlDialogOpen).Show
If Datei2 = CStr(False) Then Exit Sub

Datei2 = "'" & ActiveWorkbook.Name & "'" & "!makro2"

On Error Resume Next
 Application.Run Datei2

If Err.Number = 0 Then
 ThisWorkbook.Close False 'schließen ohne speichern, sonst True 
Else
 MsgBox "Fehler: " & Err.Number & Chr(13) & Chr(13) & Err.Description
End If

End Sub


Gruß Tino

Anzeige
AW: makro in andere Datei aufrufen
21.03.2009 22:38:30
Alex
Hi Tino
Der Code läuft perfekt mit einer kleinen Einschränkung. Falls das Makro nicht da ist läuft es super. Falls das Makro da ist, wird die andere Datei geöffnet und bis dahin auch alles super. Verschiebt man die geöffnete Datei ist im Hintergrund noch die alte offen. Habe den Code auf true gesetzt.
Könnte es sein, daß die aufgerufene Datei gleich mit einer Userform startet und Application.visible=false steht?
Gruß
Alex
nein dies liegt daran,...
21.03.2009 22:52:43
Tino
Hallo,
...dass dieses schließen erst nach Abarbeitung des aufgerufenen Makros ausgeführt wird,
weil dann erst Codeablauf zu dieser Stelle zurückkommt.
Lösung siehe anderer Beitrag.
Gruß Tino
Anzeige
oder mit einem Trick
21.03.2009 22:39:41
Tino
Hallo,
um wirklich dass Makro erst nach dem schließen der Datei zu starten,
müssen wir uns einen Trick einfallen lassen.
Übergeben wir beim Run einige Argumente die es nicht gibt,
gibt es dieses Makro bekommen wir die Fehlernummer 450.
Dies bedeutet, Makro ist vorhanden aber die Anzahl der Argumente ist falsch.
Nun starten wir dieses Makro über die OnTime Funktion,
damit diese Datei erstmal geschlossen werden kann.
Private Sub CommandButton1_Click()
Dim Datei2 As String

'On Error Resume Next 
Datei2 = Application.Dialogs(xlDialogOpen).Show
If Datei2 = CStr(False) Then Exit Sub

Datei2 = "'" & ActiveWorkbook.Name & "'" & "!makro1"

On Error Resume Next
 Application.Run Datei2, "Test_Test", "Test_Test", "Test_Test"

If Err.Number = 450 Then
 Application.OnTime Now + TimeSerial(0, 0, 1), Datei2
 ThisWorkbook.Close False 'schließen ohne speichern, sonst True 
Else
 MsgBox "Fehler: " & Err.Number & Chr(13) & Chr(13) & Err.Description
End If

End Sub


Gruß Tino

Anzeige
AW: oder mit einem Trick
21.03.2009 22:55:27
Alex
Hi Tino
Das klappt ja wunderbar.
Ein kleiner Trick und schon sieht es wirklich Toll aus.
Nochmals vielen Dank Tino
Gruß
Alex
AW: @Tino
22.03.2009 12:13:18
Alex
Hi Tino
Eine kleine Frage. Ist es möglich die aufgerufene Datei (also der Name der Datei) in einem Label aufzeigen zu lassen?

Private Sub CommandButton1_Click()
Dim Datei2 As String
'On Error Resume Next
Datei2 = Application.Dialogs(xlDialogOpen).Show
If Datei2 = CStr(False) Then Exit Sub
Datei2 = "'" & ActiveWorkbook.Name & "'" & "!Makro2"
On Error Resume Next
Application.Run Datei2, "Test_Test", "Test_Test", "Test_Test"
If Err.Number = 450 Then
Application.OnTime Now + TimeSerial(0, 0, 1), Datei2
ThisWorkbook.Close False 'schließen ohne speichern, sonst True
Else
MsgBox "Fehler: " & Err.Number & Chr(13) & Chr(13) & Err.Description
End If
End Sub


Gruß
Alex

Anzeige
AW: @Tino
22.03.2009 12:21:18
Tino
Hallo,
wenn Du mir sagst wie Du das meinst, kann ich Dir bestimmt helfen.
Wo befindet sich das Label?
Wo sitzt das Label, in der Datei wo aufgerufen wird?
Dafür gibt es das Workbook_Open Ereignis.
In der Datei die, die andere öffnet?
Macht in meinen Augen wenig Sinn, diese wird ja geschlossen und somit brauche ich auch kein Label.
Gruß Tino
AW: @Tino
22.03.2009 12:32:04
Alex
Hi Tino
Das Label ist in der Datei wo geschlossen wird.
Ich weiss, daß die Datei geschlossen wird, aber es dauert doch gute 20 Sekunden bis die andere geöffnet wird. Bis dahin wäre es cool wenn die aufgerufene Datei angezeigt wird. Es eine kleine Spielerei.
Gruß
Alex
Anzeige
AW: @Tino
22.03.2009 13:01:22
Tino
Hallo,
dann sollten wir einen anderen Dialog dafür nutzen um die Datei zu öffnen.
Für das Label habe ich Dir zwei Versionen eingebaut,
einmal für ActiveX.- u. einmal für Formular.- Steuerelement, was Du nicht benötigst einfach löschen.
Den Tabellennamen wo sich dieses Label befindet, musst Du auch noch anpassen.
Private Sub CommandButton1_Click()
Dim Datei2 As String, strDateiName As String
Dim olOb As Shape

Set olOb = Tabelle1.Shapes("Bezeichnung 1")
'On Error Resume Next 
Datei2 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
If Datei2 = CStr(False) Then Exit Sub

strDateiName = Right$(Datei2, Len(Datei2) - InStrRev(Datei2, "\"))

With ThisWorkbook.Sheets("Tabelle1") 'Tabellenname anpassen 
 'Label ActiveX- Steuerelemente 
 .Label1.Caption = strDateiName
 'für Label aus Formular- Steuerelemente 
 .Shapes("Bezeichnung 1").DrawingObject.Caption = strDateiName
End With

Workbooks.Open Datei2

Datei2 = "'" & strDateiName & "'" & "!makro2"

On Error Resume Next
 Application.Run Datei2, "Test_Test", "Test_Test", "Test_Test"

If Err.Number = 450 Then
 Application.OnTime Now + TimeSerial(0, 0, 1), Datei2
 ThisWorkbook.Close False 'schließen ohne speichern, sonst True 
Else
 MsgBox "Fehler: " & Err.Number & Chr(13) & Chr(13) & Err.Description
End If

End Sub


Gruß Tino

Anzeige
die ersten zwei Zeilen...
22.03.2009 13:03:45
Tino
Hallo,
brauchen wir nicht, waren nur für einen Test eingebaut.
Private Sub CommandButton1_Click()
Dim Datei2 As String, strDateiName As String

'On Error Resume Next 
Datei2 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
If Datei2 = CStr(False) Then Exit Sub

strDateiName = Right$(Datei2, Len(Datei2) - InStrRev(Datei2, "\"))

With ThisWorkbook.Sheets("Tabelle1") 'Tabellenname anpassen 
 'Label ActiveX- Steuerelemente 
 .Label1.Caption = strDateiName
 'für Label aus Formular- Steuerelemente 
 .Shapes("Bezeichnung 1").DrawingObject.Caption = strDateiName
End With

Workbooks.Open Datei2

Datei2 = "'" & strDateiName & "'" & "!makro2"

On Error Resume Next
 Application.Run Datei2, "Test_Test", "Test_Test", "Test_Test"

If Err.Number = 450 Then
 Application.OnTime Now + TimeSerial(0, 0, 1), Datei2
 ThisWorkbook.Close False 'schließen ohne speichern, sonst True 
Else
 MsgBox "Fehler: " & Err.Number & Chr(13) & Chr(13) & Err.Description
End If

End Sub


Gruß Tino

Anzeige
AW: die ersten zwei Zeilen...
22.03.2009 13:26:25
Alex
Hi Tino
Komme nicht so klar mit dem neuen Code.
Warum wird die Tabelle1 angesteuert? Das Label1 befindet sich in der Userform.
Gruß
Alex
AW: die ersten zwei Zeilen...
22.03.2009 13:38:17
Tino
Hallo,
wenn dieses in einer Userform steht, muss man dies auch dort ansprechen.
Mach aus den Zeilen.
With ThisWorkbook.Sheets("Tabelle1") 'Tabellenname anpassen
'Label ActiveX- Steuerelemente
.Label1.Caption = strDateiName
'für Label aus Formular- Steuerelemente
.Shapes("Bezeichnung 1").DrawingObject.Caption = strDateiName
End With

diese
UserForm1.Label1.Caption = strDateiName
Userform1 = der Name Deiner Userform.
Gruß Tino
Anzeige
AW: Es klappt bestens
22.03.2009 15:14:02
Alex
Hi Tino
Es klappt wunderbar.
Danke Tino
Gruß
Alex

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige