Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
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
Inhaltsverzeichnis

prüfen ob TXT Datei geöffnet ist

prüfen ob TXT Datei geöffnet ist
29.01.2009 20:22:00
Andre´
Hallo alle zusammen,
durch ein Makro sollen mehrere User auf eine TXT Datei zugreifen. In diese soll etwas ausgelesen und geschrieben werden.
Zum schreiben benutze ich folgenden Bsp. Code:

Sub Export()
Open "C:\test.txt" For Output As #1
Print #1, Format(Now, "hh:mm:ss")
Close #1
End Sub


Wenn jetzt mehrere User gleichzeitig auf die Datei zugreifen, kann dies Probleme verursachen.
Gibt es eine Möglichkeit, die Txt Datei abzufragen, ob diese geöffnet ist und erst wenn die Datei geschlossen ist, soll es möglich sein die Txt Datei durch Makro eines anderen User zu lesen/ zu beschreiben.
Quasi soll das Makro solange warten bis die Txt Datei geschlossen ist.
Ich hoffe mir kann jemand helfen.
Vielen Dank im Voraus!
MFG Andre

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:28:17
Ramses
Hallo
Die Datei wird ja in deinem Beispiel sowieso jedesmal neu erstellt, daher ist es doch egal ob geöffnet oder nicht.
Oder willst du fortlaufende Einträge ?
Dann ändere die Anweisung anstelle von Output in Append
Je nach Umfang des Textes, merkst du gar nichts vom öffnen und schliessen und die Wahrscheinlichkeit dass da was überschrieben wird, ist eher verschwindend gering
Gruss Rainer
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:32:00
Tino
Hallo,
geht so nicht, einer Textdatei ist es wurscht ob sie mehrmals geöffnet ist.
Du könntest die Datei für die Bearbeitung in ein Tempverzeichnis verschieben.
Nach der Bearbeitung legst Du diese wieder ins richtige Verzeichnis.
Eine Prüfung einbauen, ist die Datei nicht da kann diese auch nicht geöffnet werden.
Gruß Tino
Anzeige
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:41:52
Andre´
Hallo Rainer, Tino
danke für die Anregungen.
Ich werde Tino´s Lösung umsetzen.
MFG Andre
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:45:07
Ramses
Hallo
Sorry,... aber das ergibt keinen Sinn.
Die Datei wird mit deiner Anweisung sowieso jedesmal überschrieben und neu erstellt.
Also ist es doch egal ob die Datei da ist oder nicht.
Gruss Rainer
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:47:00
Andre´
Hallo Tino,
eine Abfrage ob die Datei existiert ist kein Problem.
Wie kann ich aber eine Warteschlange in dem Makro einbauen. Es muss ja ständig geprüft werden ob die Datei da ist. Erst wenn die Datei vorhanden ist, soll das Makro weiter laufen bis zum End Sub.
MFG Andre
Anzeige
auch @Tino AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 20:43:00
Oberschlumpf
Hi Tino
geht so nicht, einer Textdatei ist es wurscht ob sie mehrmals geöffnet ist.
Glaub ich so nicht, denn der Code:

Open "C:\test.txt" For Output As #1
Print #1, Format(Now, "hh:mm:ss")
Open "C:\test.txt" For Output As #2
Close #1


liefert in der 3. Zeile den Fehler Nr. 55 "Datei schon geöffnet"
Und ich vermute, dass eben genau DAS passiert, wenn mehrere Leute mit dem selben Code sekunden zeitversetzt diese Datei zum Beschreiben öffnen wollen.
(na ja..oder das ganze passiert nur hier bei mir bei lokalem Zugriff - ein Netzwerk zum Testen hab ich leider nicht)
Hallo Andre
Versuch mal diesen Code auf mehreren PC, die das selbe tun wollen:


Sub Export()
On Error GoTo DateiOffen
Open "C:\test.txt" For Output As #1
Print #1, Format(Now, "hh:mm:ss")
Close #1
Exit Sub
DateiOffen:
If Err.Number = 55 Then
MsgBox "Auf die Datei kann zur Zeit" & vbCrLf & _
"nicht zugegriffen werden." & vbCrLf & vbCrLf & _
"Versuchen Sie es bitte" & vbCrLf & "in einigen Minuten noch einmal.", _
vbExclamation, "Hinweis"
End If
End Sub


Wenn du allerdings, wie schon vermutet, an die Datei Text "anhängen" willst, und nicht immer wieder überschreiben, dann tausch Output gegen Append aus.
Hilfts?
Ciao
Thorsten

Anzeige
ja Du hast Doch recht!!
29.01.2009 20:54:50
Tino
Hallo,
ich habe dies nur von Hand getestet und habe diese mehrmals geöffnet und
konnte von jeder aus speichern, die letzte Speicherung blieb erhalten.
Gruß Tino
auch @Tino AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 21:04:00
Andre´
Hallo Thorsten,
den Code werd ich morgen mit mehreren Rechnern testen.
Kannst du mir noch bitte sagen wie ich eine Warteschlange einbauen kann, damit das Makro erst zu
End Sub geht, wenn das Makro keinen Fehler erkennt.
MFG Andre
auch @Tino AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 21:34:00
Oberschlumpf
Hi Andre
Was anderes als das hier fällt mir gerad nicht ein:

Sub Export()
On Error GoTo DateiOffen
Open "C:\test.txt" For Output As #1
Print #1, Format(Now, "hh:mm:ss")
Close #1
Exit Sub
DateiOffen:
If Err.Number = 55 Then
DoEvents
Resume
Else
MsgBox Err.Number & " " & Err.Description
End
End If
End Sub


Wenn die Datei schon geöffnet ist, kommt es zum Fehler 55
Mit Resume wird versucht, genau die Code-Zeile erneut auszuführen, die den Fehler verursacht hat
Und das wird mit diesem Code so lange versucht, bis kein Fehler mehr auftritt.
DoEvents sorgt dafür, dass auch im Fall dieser Endlosschleife in Excel weiter gearbeitet werden kann.
Wenn irgendein anderer Fehler kommt, wird Fehlernummer + -beschreibung angezeigt und das Programm wird beendet.
Ich finde, diese Lösung ist nicht gerade das Gelbe vom Ei, da ich nicht weiß, was in einem Netzwerk passiert.
Es gilt also....Probieren ohne Garantie auf Erfolg und Verluste, Beschädigung von Hard- + Software bleibt dein "Vergnügen".
Ciao
Thorsten

Anzeige
Vorsicht!!!
29.01.2009 21:42:44
Tino
Hallo,
habe es getestet von zwei Excelinstanzen, es ist doch wursch!!
Gruß Tino
AW: Vorsicht!!!
29.01.2009 23:13:14
Oberschlumpf
Hi
Danke, mal sehen, ob auch Andre damit was anfangen kann.
Ciao
Thorsten
mit verschieben...
29.01.2009 23:27:18
Tino
Hallo,
... der Datei, wäre dies eine Möglichkeit.
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
Dim strDatei As String
Dim OrgPfad As String, tempPfad As String
Dim iCounter As Integer

strDatei = "Test.txt" 'Dateiname 
OrgPfad = "C:\" & strDatei 'Org. Speicherort + Dateiname 
tempPfad = "C:\Neuer Ordner\" & strDatei 'Temport + Dateiname 

    'Prüfung ob Datei am Platz 
    Do While Dir$(OrgPfad, vbDirectory) = ""
        Application.Wait Now + TimeSerial(0, 0, 1)
        Sleep 1000
        iCounter = iCounter + 1
        'Sicherheit nach ca. 10s wird abgebrochen 
        If iCounter > 9 Then GoTo Gesperrt:
    Loop

'Datei verschieben in Tempordner 
Name OrgPfad As tempPfad
    
    'Datei Bearbeiten, als Beispiel, weis nicht was passieren soll 
    Open tempPfad For Output As #1
    Print #1, Format(Now, "hh:mm:ss")
    Close #1

'Datei wieder zurück 
Name tempPfad As OrgPfad

Exit Sub
Gesperrt:
MsgBox "Der Zugriff wurde verweigert!"

End Sub


Gruß Tino

Anzeige
Korrektur, ausersehen zwei Timer, sorry.
29.01.2009 23:44:43
Tino
Hallo,

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
Dim strDatei As String
Dim OrgPfad As String, tempPfad As String
Dim iCounter As Integer
strDatei = "Test.txt" 'Dateiname
OrgPfad = "C:\" & strDatei 'Org. Speicherort + Dateiname
tempPfad = "C:\Neuer Ordner\" & strDatei 'Temport + Dateiname
'Prüfung ob Datei am Platz
Do While Dir$(OrgPfad, vbDirectory) = ""
Sleep 1000
iCounter = iCounter + 1
'Sicherheit nach ca. 10s wird abgebrochen
If iCounter > 9 Then GoTo Gesperrt:
Loop
'Datei verschieben in Tempordner
Name OrgPfad As tempPfad
'Datei Bearbeiten, als Beispiel, weis nicht was passieren soll
Open tempPfad For Output As #1
Print #1, Format(Now, "hh:mm:ss")
Close #1
'Datei wieder zurück
Name tempPfad As OrgPfad
Exit Sub
Gesperrt:
MsgBox "Der Zugriff wurde verweigert!"
End Sub


Gruß Tino

Anzeige
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 22:38:00
Nepumuk
Hallo,

Gibt es eine Möglichkeit, die Txt Datei abzufragen, ob diese geöffnet ist


Ja, aber nur wenn der User die Datei mit einer Schreibschutzsperre öffnet.
Beispiel:

Public Sub Read_Protect()
    Dim intFileNumber As Integer
    Dim strText As String
    intFileNumber = FreeFile
    Open "C:\test.txt" For Input Lock Write As #intFileNumber
    Input #intFileNumber, strText
    Close #intFileNumber
End Sub

Damit die andere Prozedur wartet, musst du den entstehenden Fehler abfangen:
Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub Text_Export()
    Dim intFileNumber As Integer
    intFileNumber = FreeFile
    On Error GoTo err_open
    Open "C:\test.txt" For Output As #intFileNumber
    Print #intFileNumber, Format(Now, "hh:mm:ss")
    Close #intFileNumber
    Exit Sub
    err_open:
    If Err.Number = 70 Then
        Call Sleep(1000)
        Resume
    End If
    MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
        Err.Description, vbCritical, "Fehlermeldung"
End Sub

Ich würde ein Userform anzeigen, mit dem das Warten angekündigt wird und der User die Möglichkeit hat das ganze abzubrechen.
Gruß
Nepumuk
Anzeige
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 23:03:00
Tino
Hallo Nepumuk,
da kommt aber kein Fehler,
wenn ich die Textdatei von einer zweiten Instanz ein zweites mal öffne?
Gruß Tino
AW: prüfen ob TXT Datei geöffnet ist
29.01.2009 23:54:00
Nepumuk
Hallo Tino,
du kannst ja die Sperre auf Lock Read Write setzen. Dann kann sie tatsächlich nur einmal geöffnet werden. Aber so wie ich die Frage verstanden habe, geht es darum, dass mehrere lesen können aber nur einer schreiben. Und das schreiben soll nur dann erfolgen wenn alle anderen nicht mehr lesen.
Gruß
Nepumuk
AW: prüfen ob TXT Datei geöffnet ist
30.01.2009 00:31:00
Tino
Hallo,
ja stimmt so funktioniert es, aber ich habe die Frage wirklich anders verstanden.
Mehrerer arbeitet an den Daten und schreiben ihre in diese Textdatei,
nun würden die sich ja gegenseitig die Daten die geändert wurden überschreiben.
Also müsste man die Daten einlesen, seine Zeilen ändern und wieder zurück schreiben
und in dieser Zwischenzeit darf an der Textdatei nichts geändert werden,
selbst kann man nicht lesen und gleichzeitig schreiben, also kommt immer ein wunder Zeitpunkt.
Egal mit irgendetwas wird sich Andre anfreunden müssen.
Gruß Tino
Anzeige
@Nepumuk, gehört nicht zum Thema
29.01.2009 23:47:52
Tino
Hallo,
wo Du gerade mal da bist, ;-)
kennst Du einen Weg Daten von einer Webseite nach Excel einzulesen die auf Java basiert
und der eigentliche Text nicht im Quelltext steht.
Habe zwar einen Weg gefunden über Sendkeys, aber mit den ganzen Bugs
(ausschalten der Num-Taste usw.), suche ich einen sicheren Weg die Daten gezielt auszulesen.
Gruß Tino
AW: @Nepumuk, gehört nicht zum Thema
30.01.2009 00:12:00
Nepumuk
Hallo Tino,
speichere die Seite doch einfach und öffne sie als Textdatei:
Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _
    ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long

Public Sub test()
    Call URLDownloadToFile(0, "http://www.herber.de/forum/messages/1045235.html", _
        "D:\Eigene Dateien\Neuer Ordner\test.mht", 0, 0)
End Sub

Da bekommst du zwar den ganzen Quelltext und musst deinen Text erst heraussuchen. Aber wenn die Seite immer gleich aufgebaut ist, sollte das kein Problem für dich sein.
Gruß
Nepumuk
Anzeige
AW: @Tino: Quelltext da, aber wohl der falsche
30.01.2009 01:03:00
Erich
Hi Tino,
das bekomme ich als Quelltext - und das ist er sicher auch: https://www.herber.de/bbs/user/58925.txt
Aber das ist wohl der Quelltext der Seite, wie sie sich ohne Java-Freigabe zeigt,
also bevor sie sich mit Java-Funkti0onen neu aufbauen kann.
Ob man das auch noch irgendwie hinbekommt? Ich weiß es nicht - deshalb offen. ;-)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: @Tino: Quelltext da, aber wohl der falsche
30.01.2009 01:14:00
Tino
Hallo Erich,
ja genau so ist es und von dieser sache habe ich auch keinen Plan.
Danke
Gruß Tino
AW: @Tino: Quelltext da, aber wohl der falsche
30.01.2009 01:04:20
Erich
Hi Tino,
... - deshalb offen. ;-)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: @Nepumuk, gehört nicht zum Thema
30.01.2009 01:05:00
Nepumuk
Hallo Tino,
ich hab das jetzt mit der von dir angegebenen Seite gemacht. Und siehe da: https://www.herber.de/bbs/user/58924.txt
13 DIN A4 Seiten Code. Was suchst du eigentlich genau? Da sind natürlich Teile in Frams dabei, da hab ich aber zu wening Ahnung von der Materie als dass ich dir sagen könnte, wie du an diese ran kommst. Dafür würde ich mich an deiner Stelle mal an ein entsprechendes Forum wenden. Hier z.B.: http://www.office-loesung.de/index18.php
Gruß
Nepumuk
AW: @Nepumuk, gehört nicht zum Thema
30.01.2009 01:36:00
Tino
Hallo,
so weit bin ich auch immer gekommen,
aber die Daten die in der Tabelle stehen blieben mir verborgen.
Habe ich vielleicht auch falsch ausgedrückt „kein Quelltext“ der ist schon da,
aber nicht wie üblich, dass man irgendwo die Daten findet die in der Tabelle stehen.
Über SendKeys kann ich die Daten ja auch in die Zwischenablage holen und
dort die entsprechenden Zeilen rausfiltern, nur dass funktioniert 99 mal gut und
einmal geht es in die Hose.
Naja, irgendwann werde ich mich noch mal intensiver damit beschäftigen und
vielleicht fällt auch irgendwann der berühmte Groschen.
Danke für den Link und Deine Rückmeldungen, wünsche eine Gute Nacht.
Gruß Tino

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige