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!
#11
Hallo Alexandra,

jetzt hast Du es nach Stefan's Erklärung bestimmt schon gesehen.
In Deinem IF hast Du zwei Teile, einmal den für den Fall, dass die Datei offen ist, und im ELSE den Teil, wenn sie zu ist. Das Schließen der Datei mit CLOSE hast Du erst nach dem END IF und damit außerhalb des IF-codeabschnitts. Deine Excel-Datei wird also in jedem Fall geschlossen. Damit die Arbeitsmappe offen bleibt, musst Du den CLOSE-code Wink nur weiter oben platzieren.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12
Hallo André,

(04.07.2014, 15:49)schauan schrieb: Deine Excel-Datei wird also in jedem Fall geschlossen.

Das glaube ich eher nicht, denn wenn der Else-Teil nicht abgearbeitet wird enthält die Variable Ziel keinen Verweis auf das Objekt und ist somit Nothing.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#13
Hallo Stefan,

nachdem wir nun gewonnen haben :18: kann ich wieder antworten :15:

so ein Quatsch ... Das sollte genau anders rum sein - geschlossen und offen vertauscht Sad .
Zitat:Deine Excel-Datei wird also in jedem Fall geschlossen. Damit die Arbeitsmappe offen bleibt, musst Du den CLOSE-code Wink nur weiter oben platzieren.
Korrekt:
Zitat:Deine Excel-Datei bleibt also in jedem Fall offen. Damit die Arbeitsmappe geschlossen wird, musst Du den CLOSE-code Wink nur weiter oben platzieren.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#14
Hallo Andre,

das letzte war nun wieder genau verkehrt herum. Wink

Fakt ist erst einmal, dass der Close-Befehl in den Else-Zweig gehört.

Aber unabhängig davon hat der gepostete Code mit Sicherheit nichts mit der Frage zu tun,
denn der läuft so nicht richtig. Wenn die Mappe schon offen war, müsste ja eine Fehlermeldung kommen,
weil Ziel nicht gesetzt wurde.

Gruß Uwe
Antworten Top
#15
Hallo Jungs :),


und wie ist es jetzt richtig, habe den Ziel.Close Teil in den Zweig der Else aber geschlossen wird die Datei trotzdem immer!

Wie muss der Code richtig lauten?


Danke
VG
Alexandra
Antworten Top
#16
Hallo Alexandra,

dann gibt mit großer Wahrscheinlichkeit die Abfrage FileStatus bei

Code:
If FileStatus("test1.xlsm") = xl_open Then

nie xl_open zurück.

Gruß Uwe
Antworten Top
#17
Hallo Uwe,


danke für den Hinweis, darauf hin habe ich mal die Datei in eine andere Excelinstanz geöffnet und der Code lief weiter! Dies zur Info!

Habe es nun aber doch anders gelöst bekommen, nach einigen :) Versuche:

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 = "C:\Users\rabe\Downloads\test1.xlsm"
If FileStatus(strFile) = xl_closed Then
     Else
Exit Function
End If
PrüfungDateiOffen = False
End Function
Sub sync()
Dim Ziel As Workbook
If PrüfungDateiOffen Then
Application.Run "'test1.xlsm'!DatenSync"
Exit Sub
Else
Set Ziel = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "test1.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
Run "'C:\Users\rabe\Downloads\test1.xlsm'!DatenSync"
Ziel.Close
End If
End Sub


Vielen Dank Euch
VG
Alexandra
Antworten Top
#18
Hallo Alexandra,

danke für die Rückmeldung.
Das Exit Sub im If-Zweig ist überflüssig!!!

Vielleicht solltest Du Deine Funktionen, bevor Du sie dann "scharf" einsetzt,
erst einmal richtig prüfen.

Ein passendes Beispiel, auch ohne Enum, siehst Du hier: Datei geöffnet ?

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • cysu11
Antworten Top
#19
Hallo Uwe, hallo Excelgemeinde,


leider ist das Thema doch nicht vom Tisch ;(

Habe das nun live im Netzwerk getestet und, da gibt es ein Problem!
Mein Codes schauen nun so aus:

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üfungDateiOffenUser2() As Boolean
Dim strFile As String
PrüfungDateiOffenUser2 = True
strFile = "P:\CLIENTS\User2Datei.xlsm"
If FileStatus(strFile) = xl_closed Then
     Else
Exit Function
End If
PrüfungDateiOffenUser2 = False
End Function


Sub sync()
Dim Ziel As Workbook
If PrüfungDateiOffenUser2 Then
Run "'P:\CLIENTS\User2Datei.xlsm'!DatenSync"
Else
Set Ziel = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "User2Datei.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
Run "'P:\CLIENTS\User2Datei.xlsm'!DatenSync"
Ziel.Close
End If
End Sub

Ich bin User1 am Arbeitsplatz 1 und arbeite in der Datei User1Datei.xlsm im Netzwerk!
Nun möchte ich den Code "Datensync" ausführen in der User2Datei.xlsm die im Netzwerk liegt und entweder nicht in Benutzung ist (das funktioniert schon mal :) ) oder in Benutzung ist durch User2 am Arbeitsplatz 2!!! Wenn User2 die Datei "User2Datei.xlsm" offen hat, dann funktioniert mein Code nicht ganz, sondern es wird ein Klon von der "User2Datei.xlsm" geöffnet und der Code ausgeführt in diese Datei! In der eigentlichen "User2Datei" die ja User2 in Benutzung hat tut sich nichts!

Was mache ich da falsch???


Viele Dank im Voraus
VG
Alexandra

P.S. ......Schlaaaaaannnnnddddd :)
Antworten Top
#20
Hallo Alexandra,

wenn Du das Ganze im Einzelschritt durch laufen läßt, wie wird die Datei bei Dir geöffnet? Und was wird in dem Code Datensync überhaupt gemacht. Einträge in die Tabelle? Bei mir auf der Arbeit kenne ich das nur, wenn ein anderer Kollege die Datei bereits geöffnet hat, ich keine Änderungen in der Datei machen kann.
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


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