2.7k Aufrufe
Gefragt in Tabellenkalkulation von finger59 Experte (1.3k Punkte)
Hallo Excel-Gemeinde,
habe im Moment ein Problem und komme nicht auf die korrekte Lösung.
Über eine Schaltfläche starte ich folgendes Makro, das überprüfen soll, ob eine bestimmte Datei - Akkordminuten - bereits geöffnet ist.

Sub Akkminkop()
Dim bln As Boolean
bln = Daoffen("G:\Fertigung\Abrechnung zusätzliche Akkordminuten 2010\Akkordminuten.xls")
If bln = False Then
MsgBox "Die Datei kann nicht geöffnet werden, da ein anderer User diese geöffnet hat!" & _
"Bitte versuchen Sie es zu einem späterem Zeitpunkt noch einmal! - Vielen Dank !", vbOKOnly
Else
UserForm4.Show
End If
End Sub

Dann habe ich noch eine Funktion für Daoffen wie folgt generiert:
Function Daoffen(ByVal str As String) As Boolean

On Error GoTo fehler
Daoffen = True
Windows(str).Activate
Exit Function

fehler: Daoffen = False
End Function

***************************
Leider erhalte ich aber immer die Info das die Datei bereits geöffnet ist und somit wird der Vorgang mit der Msgbox abgebrochen.

Kann mir jemand sagen, wo der Fehler dabei liegt.
Mit der Übernahme der Funktion hatte ich vorher auch meine Probleme aber dank der Beschreibung von Coros (Oliver - Thanx) hatte ich das dann doch hinbekommen.

In der Hoffnung das mir jemand weiterhelfen kann, sage ich schon mal allen vielen Dank für das Interesse mir zu helfen und wünsche allen noch einen schönen Abend... LG Helmut

7 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Unbekante(r),

Du solltest Deiner Funktion nur den Dateinamen übergeben.

Gruß Hajo
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo Hajo,
zunächst eimal vielen Dank für Deine Antwort, auch wenn ich mir noch nicht sicher bin, ob ich das richtig verstehen werde, aber das werde ich erst morgen wieder an der Arbeit austesten können.

Frage aber dennoch...

Wenn ich das Verzeichnis nicht mit angebe, woher soll dann das Makro wissen, wo die Datei steht, da die Ausgangsdatei sich zwar auf dem Laufwerk G, aber in unterschiedlichen Ordnern befindet?

bln = Daoffen("G:\Fertigung\Abrechnung zusätzliche Akkordminuten 2010\Akkordminuten.xls")
Ich vermute mal, daß Du diesen Abschnitt meinst.

Bin echt mal gespannt ob das so klappt, wenn ich das weg lasse.

Wie gesagt... schon mal vielen Dank für Deine Unterstützung und - smile... irgendwie magst Du meinen Namen nicht so wirklich, da Du ihn (mal wieder) überlesen hast. Aber ich kann damit ganz gut leben.. und schmunzel ja jedesmal, wenn ich von Dir eine Antwort bzw. Lösung erhalte und als Anrede sowas wie oben steht...

Für den Fall des es eine bessere Lösung wie die meinige gibt, ich möchte von unterschiedlich gleich aufgebauten Arbeitsdateien, die in unterschiedlichen Odnern stehen, die Daten in die Akkordminuten übertragen. Und wenn jemand die Daten übertragen lassen will, dann soll erst mal geklärt sein, ob die Zieldatei Akkordminuten nicht bereits durch eine andere Person geöffnet wurde und somit möchte ich den Vorgang abbrechen lassen.

Wie geschrieben, die anderen Dinge, wie die Ursprungsdatei auslesen und dann das hineinkopieren in Akkordminuten funktionieren soweit.
In diesem Sinne... have a nice Day... LG Helmut
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Helmut,

der Namen ist mir nicht aufgefallen da zur sehr versteckt im Text.
eine offnen Datei spricht man mit Ihrem Namen an, der Pfad ist nicht notwendig da es nur eine geben kann.

Gruß Hajo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Helmut,

versuche es mal so:
Sub MappeOffenPruefen()
Application.DisplayAlerts = False
If DateiIstFrei("G:\Fertigung\Abrechnung zusätzliche Akkordminuten 2010\Akkordminuten.xls") = True Then
UserForm4.Show
Else
MsgBox "Die Datei kann nicht geöffnet werden, da ein anderer User diese geöffnet hat!" & _
"Bitte versuchen Sie es zu einem späterem Zeitpunkt noch einmal! - Vielen Dank !", vbOKOnly
End If
Application.DisplayAlerts = True
End Sub

Function DateiIstFrei(strDatei As String) As Boolean
Dim inFile As Integer
On Error Resume Next
inFile = FreeFile()
Open strDatei For Random Access Read Lock Read Write As #inFile
If Err Then
DateiIstFrei = False
Else
DateiIstFrei = True
End If
Close #inFile
End Function

Bis später,
Karin
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo Hajo, hallo Beverly,

vielen Dank für Eure Unterstützung.

@Hajo - leider hat mir das wegnehmen des Pfades nichts gebracht - sprich das Programm hat mir je nachdem wie ich die True und False eingestellte hatte, die gleiche fehlerhafte Ausführung gemacht wie mit der Pfadangabe.
Rein vom Gedanken her muss ich Dir schon recht geben, daß es mit dem Dateinamen reichen müsste. Entweder habe ich was beim Übertragen aus einem Buch doch was übersehen oder da ist ein Fehler drin. - Schade -

@ Karin - ich habe zwar keinerlei Ahnung was Du mir da geschickt hast, aber it works... und das ist zunächst einmal entscheidend.

Vielen vielen Dank nochmals für Eure Unterstützung und
in diesem Sinne... have a nice Day... LG Helmut
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Helmut,

es wird versucht, die Datei in einem bestimmten Modus sozusagen als Kopie zu öffnen - ist dieser Modus nicht gegeben (und das ist der Fall wenn die Datei bereits geöffnet ist), wird ein Fehler ausgelöst, welcher dann ausgewertet wird. Schau mal in der VBA-Hilfe nach dem Stichwort "Open-Anweisung", da findest du die entsprechenden Informationen für das Öffnen von Dateien in definierten Modi.

Bis später,
Karin
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hi Karin,

nochmals vielen Dank für die Erklärung.

LG Helmut
...