Vba-Hilfe benötig - Datei geöffnet j/n
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
Antwort schreiben
Antwort 1 von Hajo_Zi vom 02.03.2022, 19:30 Options
Hallo Unbekante(r),
Du solltest Deiner Funktion nur den Dateinamen übergeben.
Gruß Hajo
Antwort 2 von finger59 vom 02.03.2022, 20:39 Options
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
Antwort 3 von Hajo_Zi vom 02.03.2022, 20:53 Options
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
Antwort 4 von Beverly vom 02.03.2022, 23:14 OptionsLösung
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
Antwort 5 von finger59 vom 03.03.2022, 12:53 Options
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
Antwort 6 von Beverly vom 03.03.2022, 13:13 Options
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
Antwort 7 von finger59 vom 03.03.2022, 16:31 Options
Hi Karin,
nochmals vielen Dank für die Erklärung.
LG Helmut