Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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

Datei existiert bereits

Datei existiert bereits
05.01.2021 15:18:40
Steve
Moin Leute,
ich hab mal wieder an meinem Makro rumgeschraubt.
Per Doppelklick in eine bestimmte Zelle (in Spalte A) kann ich eine Datei umbenennen. Nun könnte es ja theoretisch passieren, dass diese Datei bereits existiert. Also kommt das Debug-Fenster und teilt mir dieses mit. Das ist natürlich unschön. Ich möchte diesen speziellen Fehler abfangen und dem User sagen:
"Die Datei existiert bereits. Bitte wähle einen anderen Dateinamen."
Das habe ich auch bereits hinbekommen. Aber dabei trat ein Problem auf das ich an einer anderen Stelle auch schon nicht lösen konnte. (und eine Notlösung eingebaut habe.)
Nachdem die Meldung kam, das die Datei schon existiert,bestätigt man mit OK und erhält wieder das Eingabefenster in dem der alte Dateiname voreingetragen ist.
Gehen wir mal davon aus, der neue gewählte Dateiname ist auch vergeben.....tja, dann erscheint wieder das Debugfenster weil der Code ja einfach weitergelaufen ist. Besser wäre der Code springt wieder nach oben zur ursprünglichen Abfrage.
Ich versuche meine Frage mal zu verallgemeinern.
Wie kann ich diese Abfrage so lange als Schleife laufen lassen, bis der User endweder einen passenden Dateinamen eingegeben, oder auf Abbruch geklickt hat?
Sub TEST() -steht hier nur damit der code sich abhebt -
'Neuer Dateiname wird abgefragt.
vEingabe = InputBox("Bitte gib den neuen Dateinamen ein." & vbCrLf & vbCrLf & "Dateiendung  _
NICHT eingeben", "Dateiname ändern:", DatNamoE)
If vEingabe = "" Then
Exit Sub
Else
NDatNam = vEingabe & Dateiendung  'Neue Dateiname
End If
NPfad = Left(APfad, InStrRev(APfad, "\") - 0) & NDatNam
''Pruefung ob Datei evtl noch geoeffnet
If Not IsFileOpen(APfad) Then
If Dir(NPfad)  "" Then
If MsgBox("Datei existiert bereits!" & vbCrLf & vbCrLf & "Bitte wähle einen anderen  _
Dateinamen", vbOKCancel, "Sicherheitsabfrage") = vbCancel Then
Exit Sub
Else
vEingabe = InputBox("Bitte gib den neuen Dateinamen ein." & vbCrLf & vbCrLf & " _
Dateiendung NICHT eingeben", "Dateiname ändern:", DatNamoE)
End If
End If
'Datei wird umbenannt
Name APfad As NPfad
End Sub
Bei Bedarf sende ich auch gerne meine Datei. Ich nehme aber auch gerne eine gute Erklärung, einen Codeschnipsel oder was zum lesen. (Dabei lerne ich am besten.)
Liebe Grüße
Steve

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei existiert bereits
05.01.2021 16:17:00
ralf_b
versuchs mal damit
Sub TEST() '-steht hier nur damit der code sich abhebt -
'Neuer Dateiname wird abgefragt.
Do
vEingabe = InputBox("Bitte gib den neuen Dateinamen ein." _
& vbCrLf & vbCrLf _
& "Dateiendung NICHT eingeben", "Dateiname ändern:", DatNamoE)
If vEingabe = "" Then
Exit Sub
Else
NDatNam = vEingabe & Dateiendung  'Neue Dateiname
End If
NPfad = Left(APfad, InStrRev(APfad, "\") - 0) & NDatNam
Loop While DateiExistiert(NPfad)
'Datei wird umbenannt
Name APfad As NPfad
End Sub
Public Function DateiExistiert(ByVal Dateipfad As Variant) As Boolean
' Quelle: http://www.dbwiki.net/
On Error Resume Next
DateiExistiert = CreateObject("Scripting.FileSystemObject").FileExists(Dateipfad)
End Function

Anzeige
AW: Datei existiert bereits
06.01.2021 08:12:10
Luschi
Hallo Steve,
der Vorschlag von Ralf funktioniert solange, wie sich der Anwender an die Spielregeln zur Bildung von Dateinamen hält.
Gibt er aber Tabu-Zeichen ein: : | ? * \ / "
dann liefert die Funktion 'DateiExistiert' zwar 'False' und meckert nicht, aber der Name-Befehl scheitert dann kläglich; hier hilft nur noch ein bißchen weiterschrauben.
Gruß von Luschi
aus klein-Paris
AW: Datei existiert bereits
06.01.2021 10:50:42
Steve
Moin Luschi,
danke für diesen Hinweis. In welche Richtung muss ich da was nachlesen?
Liebe Grüße
Steve
AW: Datei existiert bereits
06.01.2021 10:49:37
Steve
Danke für deine Hilfe Ralf.
Das funktioniert sehr gut. Ich hatte ja, wie ob erwähnt das Problem schon einmal.
Damals habe ich das sehr unelegant mit einer zweiten Abfrage und einem erzwungenen Abbruch gelöst.
Nun dachte ich mir, ich könnte das von dir gelernte direkt mal umsetzen um dieses Problem zu lösen.
Ich bekomme zwar keine Fehlermeldung aber irgendwie passiert was merkwürdiges.
Zum Thema:
Nach der Eingabe des neuen Dateinamens wird geprüft ob diese Datei (sind alle möglichen Dateieendungen - zumeist PDF) geöffnet ist. Leider passiert es nämlich zu oft das der User die Datei noch offen hat und dann landet er direkt in einem DebugFenster.
Ich möchte, das er diese Prüfung so lange wiederholt, bis die Datei endlich geschlossen wurde oder der User auf Abbruch klickt. Das habe ich nun in einer Testumgebung versucht umzusetzen. Und es hat geklappt.
ABER:
TXT-Dateien werden einfach neu angelegt. Kannst du mir sagen woran das liegt?
Also wenn man eine TXT öffnet und dann versucht umzubenennen, (durch Doppelklick in der Nummer in Spalte A) kommt keine Meldung das diese Datei schon offen ist. Stattdessen führt er die Änderung durch und behält die alte Datei. Man hat also auf einmal zwei Dateien.
Ich hänge dir mal zum Testen meine Datei an.
Das entsprechende Makro befindet sich im Arbeitsblatt da Doppleklick-Event
(Ich habe das Makro noch nicht für den Button umgesetzt - also das nicht benutzen)
https://www.herber.de/bbs/user/142803.zip
Vielen Dank und Liebe Grüße
Steve
Anzeige
AW: Datei existiert bereits
06.01.2021 11:37:08
ralf_b
nein, ich weis nicht woran das liegt.
ist aber bei mir genau das gleiche Verhalten.
Möglicherweise benötigt man dazu Windows API Funktionen um herauszufinden ob die Datei schon offen ist. Vermutlich blockiert der Texteditor die Datei nicht. Denn wenn du die Textdatei mit Excel öffnest und sie importierst, dann wird die Datei als offen erkannt. Leider kann man sie dann nicht mehr schließen weil die Messagebox modal ist und die Dateischließung verhindert.
gruß
rb
DANKE
06.01.2021 11:42:18
Steve
Moin Ralf,
zum Glück war das nur eine Testumgebung. Das mit dem automatischem Schließen über die Funktion funktioniert ohnehin nicht. Ich hab diese Funktion aus dem Netz und kenne mich noch nicht gut genug damit aus um darin rumzuspielen. Das ist mein nächstes Projekt. Werde mal schauen das ich nur die Prüfung mache und den Rest weglasse.
Es reicht ja wenn mein Makro dem User so lange auf die Füße tritt, bis er die Datei schließt.
Ich wünsche dir noch ein gutes und Gesundes Jahr 2021
Steve
Anzeige
Daten werden kopiert.
06.01.2021 13:34:21
Steve
Moin Ralf,
nun werden alle Daten, auch PDF direkt nach dem umbennen einfach kopiert.
Geht man nach dem Umbennenen auf "Daten auflisten" zeigt sich, das die alte Datei noch vorhanden ist.
Die Alte Datei bleibt also bestehen.
Ich hab mal mein Do/Loop entfernt, dann passiert das nicht. Ich nehme an ich hab da einen Fehler eingebaut. Kannst du mir sagen wo dieser Fehler liegt?
Liebe Grüße
Steve
Doppelklick-Event für Datei umbenennen
06.01.2021 14:46:35
Steve
Hallo Ralf,
ich denke ich habe den Fehler gefunden. Aber ich verstehe ihn nicht.
Habs mehrfach getestet und bisher ist nichts ungewöhnliches passiert.
Ursprünglich hatte ich es so:
Sub URSPRÜNGLICH()
Do
If Not IsFileOpen(APfad) Then
'Datei wird umbenannt
Name APfad As NPfad
'Hyperlink UEberschrift wird angepasst
ActiveSheet.Hyperlinks.Add Anchor:=Cells(a, 3), Address:=NPfad, TextToDisplay:= _
NDatNam
'Spalte Pfad wird umgeschrieben
ActiveSheet.Cells(a, b + 7) = NPfad
Else
MsgBox "Bitte zunächst die Datei schließen"
End If
Loop While IsFileOpen(APfad
End Sub
Jetzt ist es so:
Sub NEU()
Do
If IsFileOpen(APfad) Then
If MsgBox("Bitte zunächst die Datei schließen!", vbOKCancel, "ACHTUNG")  _
= vbCancel Then
Exit Sub
End If
End If
Loop While IsFileOpen(APfad)
'Datei wird umbenannt
Name APfad As NPfad
'Hyperlink UEberschrift wird angepasst
ActiveSheet.Hyperlinks.Add Anchor:=Cells(a, 3), Address:=NPfad, TextToDisplay:=NDatNam
'Spalte Pfad wird umgeschrieben
ActiveSheet.Cells(a, b + 7) = NPfad
End Sub
Warum das funktioniert kann ich mir nicht erklären. Hast du eine Erklärung dafür?
Steve
Anzeige
AW: Doppelklick-Event für Datei umbenennen
06.01.2021 19:53:45
ralf_b
Hallo Steve,
ich hab grad keinen blassen Dunst was da jetzt warum geht. Ich persönlich halte es für überflüssig zweimal isfileopen in den Code zu bauen. Du hattest auch zweimal die Funktion in deinem Projekt.
In der unteren Version wird die Umbenennung pauschal durchgeführt. Ohne fileisopen zu beachten. Nur wenn du die Messagebox abbrichst wird das Umbenennen umgangen.
gruß
rb

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige