Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1624to1628
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

Frage(n) zur Function IsFileOpen

Frage(n) zur Function IsFileOpen
29.05.2018 14:31:49
Kai
Hallo zusammen,
für eine Prüfung, ob eine zu öffnende Datei bereits geöffnet ist, habe ich im Netz folgende Funktion gefunden:
Function IsFileOpen(filename As String)
Dim filenum As Integer
Dim errnum As Integer
On Error Resume Next   ' Turn error checking off.
filenum = FreeFile()   ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum          ' Close the file.
errnum = Err           ' Save the error number that occurred.
On Error GoTo 0        ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function

Klappt alles wunderbar, da ich aber gerne wissen möchte was hier genau passiert, habe ich zwei Verständnisfragen:
1.

filenum = FreeFile()   ' Get a free file number.

Was hier geschieht, habe ich inzwischen herausgefunden. Wo der Sinn von "FreeFile" bzw. "free file number" liegt allerdings nicht. Wofür ist das gut?
2.

Open filename For Input Lock Read As #filenum

Hier wird versucht, die Datei (filename) zu öffnen. Soweit klar. Was bedeutet "Lock" und welche Rolle spielt "filenum" (siehe Frage 1)?
Der Rest ist ersichtlich. Ist die Datei bereits geöffnet, tritt ein Fehler (70) auf. Andernfalls nicht, also (0). Der Fehlercode wird in "errnum" gespeichert und über "Select Case" abgefragt. Als Ergebnis erhalte ich "False" (Datei nicht offen) oder "True" (Datei bereits geöffnet).
Ich hoffe auf Erleuchtung.
Gruß
Kai

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage(n) zur Function IsFileOpen
29.05.2018 15:05:13
mmat
Hei Kai,
Beim Öffenen wird immer eine Nummer angegeben, über diese Nummer wird bei späteren Befehlen auf die geöffnete Datei Bezug genommen. z.B.:
Open "Datei" for Output as #1
print #1, "xy"
Close #1
"filenum = FreeFile()" macht nix anderes als die nächste Freie Nummer festzustellen und in der Variablen "filenum" zu speichern.
Mit Lock wird eine Datei für die exklusive Benutzung durch einen speziellen Prozess gesperrt. Wenn das schiefgeht, dann ist die Datei bereits durch einen anderen Prozess "in Arbeit".
AW: Frage(n) zur Function IsFileOpen
29.05.2018 15:57:03
Kai
Hallo mmat,
"Beim Öffenen wird immer eine Nummer angegeben"
Also wird Excelintern eine Nummer vergeben? Kann ich zwar nachvollziehen, bringt mich bei der Sinnfrage aber nicht weiter. Das wird in VBA selten verwendet, oder?
"Mit Lock wird eine Datei für die exklusive Benutzung durch einen speziellen Prozess gesperrt. Wenn das schiefgeht, dann ist die Datei bereits durch einen anderen Prozess "in Arbeit"."
OK, hört sich logisch an. Warum ist dafür filenum bzw. free file number nötig? Kommt der Fehler nicht, wenn ich versuche, die Datei nur über den Dateinamen zu öffnen? Oder ist das schlicht und ergreifend die erforderliche Syntax für diese Methode?
Ich lasse den Beitrag mal auf offen stehen...
Übrigens finde ich die Kenntnis-Level etwas grob unterteilt. Ich glaube, bei VBA über bescheiden hinaus zu sein, gut wäre aber übertrieben. Irgendwo dazwischen passt eher.
Gruß
Kai
Anzeige
Gefährliches Halbwissen meinerseits
29.05.2018 16:28:02
Peter(silie)
Hallo,
FreeFile ist mehr oder weniger der Buchtitel für den Computer.
Daran kann er die Datei eben identifizieren.
Wir brauchen Dateinamen auch nur, weil wir nicht in der Lage sind uns zu merken dass in Datei 192 die Inventur aus dem Jahre 2010 zu finden ist.
Du und ich brauchen dann halt die info: Inventur_2010.txt
Wer effektive Lese und Schreibevorgänge tätigen will, benötigt dass häufig.
Ich kann dir leider nicht sagen, was genau durch Open passiert,
aber da wird wohl irgendein objekt geladen werden, welches schritt für schritt mit bestimmter
buffer größe die daten in binär einliest.
Warum einen Dateinamen verwenden bei einem System dass nur 1 und 0 kennt?
Anzeige
FreeFile sollte immer angewendet werden....
30.05.2018 09:42:38
EtoPHG
Hallo Kai,
Zitat: Also wird Excelintern eine Nummer vergeben? Kann ich zwar nachvollziehen, bringt mich bei der Sinnfrage aber nicht weiter. Das wird in VBA selten verwendet, oder?
Die Dateinummer ist der eindeutige Schlüssel für eine zu manipulierende externe Datei.
Die Verwendung ist immer dann angebracht, wenn mit externen Dateien per VBA manipuliert wird.
FreeFile gibt die nächste freie Dateinummer zurück. Wenn mehrere Mappen nebeneinander laufen und/oder du verschiedene Codeteile hast, bei denen mehrere solche externen Dateien ansprechen, dann kannst du nur über die Dateinummer sicher sein, die richtige anzusprechen.
Das alles kannst du auch in Online-Help des MSDN nachlesen.
Gruess Hansueli
Anzeige
AW: FreeFile sollte immer angewendet werden....
30.05.2018 11:00:49
Kai
Hallo Hansueli,
danke für die Erklärung. Die Onlinehilfe habe ich gelesen, das war mir aber nicht ausführlich genug. Ich frage hier nur, wenn mich eine (intensive) Onlinesuche nicht weiterbringt. Oft ist die Excel-/MSDN-Hilfe nicht gut verständlich oder wirft mehr Fragen auf, als sie beantwortet. Jedenfalls für Spät-/Quereinsteiger, die die Programmierung nicht von Grund auf gelernt haben.
Gruß
Kai

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige