Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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)
Antworten 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
Antworten 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
Antworten Top
#5
Hi Alexandra,

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

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


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


VG
Alexandra
Antworten 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
Antworten 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
Antworten Top
#9
Hi Alexandra,

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

aah, ok. Dann ist das klar.
Antworten 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
Antworten Top


Gehe zu:


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