Sub in mehrere Dateie aufrufen!
#1
Hallo liebe Excelgemeinde,


mit folgenden Codes starte ich aus 3 verschieden Dateien im Neztwerk eine Code namens "Datensync"! Das funktionert auch prima!
Das was ich nicht hinbekomme ist aber das der folgende Code:
Code:
Sub LiveSyncAll()
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
Run "'C:\Users\rabe\Downloads\test2.xlsm'!DatenSync"
Run "'C:\Users\rabe\Downloads\test3.xlsm'!DatenSync"
End Sub

hier zuerstprüft ob die jeweiligen Dateien offen sind, wenn ja dann einfach den Code "Datensync" starten, wenn nein dann die jeweilige Datei öffnen den Code starten und dann wieder schließen!
Einen Code zur allgemeinen Prüfung ob eine bestimmte Datei offen ist habe ich schon:

Code:
Option Explicit
Public Enum XL_FILESTATUS
     XL_UNDEFINED = -1
     XL_CLOSED
     XL_OPEN
     XL_DONTEXIST
End Enum

Public Function FileStatus(xlFile As String) As XL_FILESTATUS
On Error Resume Next
Dim File%: File = FreeFile
Err.Clear
Open xlFile For Binary Access Read Lock Read As #File
Close #File
Select Case Err.Number
     Case 0: FileStatus = XL_CLOSED
     Case 70: FileStatus = XL_OPEN
     Case 76: FileStatus = XL_DONTEXIST
     Case Else: FileStatus = XL_UNDEFINED
End Select
End Function
Function PrüfungDateiOffen() As Boolean
Dim strFile As String
PrüfungDateiOffen = True
strFile = ThisWorkbook.Path & "\" & "DB.xlsm"
If FileStatus(strFile) = XL_CLOSED Then
     Else
     MsgBox "Datenbank wird bereits bearbeitet, bitte versuchen Sie es später noch einmal!"
Exit Function

End If
PrüfungDateiOffen = False
End Function

Meine Fragen, wie kann ich beide Codes kombinieren, damit ich mein Vorhaben umsetzten kann?


Vielen Dank im Voraus
VG
Alexandra
Top
#2
Hallo Alexandra,

im Prinzip
Code:
If Filestatus("test1.xlsm") = xl_open then Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo Andre,

habe bis jetzt mit einer Mappe versucht und es funktioniert wenn die Zieldatei zu ist!
Wenn Sie offen ist, dann kommt immer die Melund, dass diese Bereits offen ist, und ob ich es noch einmal öffnen möchte! Es soll aber nur der Code ausgeführt werden!

HIer mein Code der noch nicht ganz funktioniert :)

Code:
Sub sync()
Dim Ziel As Workbook
If FileStatus("test1.xlsm") = xl_open Then
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
Else
Set Ziel = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "test1.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
End If
Ziel.Close
End Sub

Was mache ich falsch?


Danke
VG
Alexandra
Top
#4
Hallo Andres,


so jetzt funktioniert es wenn die Datei offen ist und wenn die Datei zu ist, allerdings möchte ich dass wenn die Datei offen ist, dass diese dann auch offen bleibt, und wenn diese zu ist, dass diese nach dem Code auch wieder geschlossen wird!

Code:
Sub sync2()
Dim Ziel As Workbook
If FileStatus("test1.xlsm") = xl_open Then
Application.Run "'test1.xlsm'!DatenSync"
Else
Set Ziel = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "test1.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
End If
Ziel.Close
End Sub

Wie muss ich den Code ändern?


DAnke
VG
Alexandra
Top
#5
Hi Alexandra,

(03.07.2014, 21:07)cysu11 schrieb: Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"

hat der User eigentlich was mit mir zu tun?
Top
#6
Hallo Ralf,


ich denke nicht, das ist nur mein Familienname! :)


VG
Alexandra
Top
#7
Hallo Alexandra,

Sub sync2()
Dim Ziel As Workbook
If FileStatus("test1.xlsm") = xl_open Then
Application.Run "'test1.xlsm'!DatenSync"
Else
Set Ziel = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "test1.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
End If
Ziel.Close
End Sub

schiebe die rote Zeile dahin, wo sie hin gehört! Wink

Gruß Uwe
Top
#8
Hallo Uwe,


In dein Code ist die rote Zeile genau da wo sie bei mir auch ist, oder übersehe ich etwas?


Danke
VG
Alexandra
Top
#9
Hi Alexandra,

(03.07.2014, 23:46)cysu11 schrieb: ich denke nicht, das ist nur mein Familienname! :)

aah, ok. Dann ist das klar.
Top
#10
Hallo Alxandra,

Uwe wollte Dir damit zeigen, dass die Codezeile sich an der falschen Stelle befindet. Um den Codeablauf besser zu verstehen, solltest Du den Code mal im Einzelschritt durchlaufen lassen. Hier könntest Du ein Stop einfügen, um den Code anzuhalten (siehe mein Beispiel).

Code:
Sub sync2()
Dim Ziel As Workbook
Stop
If FileStatus("test1.xlsm") = xl_open Then

Drücke nun die F8-Taste um zu sehen, wie Excel deinen Code abarbeitet, wenn die Datei offen ist und wenn die Datei zu ist. Danach solltest Du erkennen wo die rotmarkierte Codezeile hingehört.
Gruß Stefan
Win 10 / Office 2016
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste