mreske
Goto Top

Dateinamen per VBA Marko ändern

Hallo
ich möchte per Doppelklick einen über eine Inputbox vorgegebenen Dateinamen ändern:

zum Hintergrund:
ich habe ein Excel Datenblatt, in dem mir automatisch alle Dateinamen eines vorgegebenen Ordners (Zelle "C1") aufgelistet werden
In Spalte C: Der Dateiname
In Spalte E: Der Pfad + Dateiname
In Spalte A wird angegeben ob die Datei noch unbearbeitet ist (d.h., wenn die Datei NICHT mit dem Text "bearbeitet" ANFÄNGT)
=WENN(LINKS(C272;10)<>"bearbeitet";"unbearbeitet";""))

Per Doppelklick auf einen Dateinamen in Spalte C öffnet sich eine Inputbox.
Der neue Dateiname wird in der Inputbox schon vorgegeben.

Bis hierher klappt alles bestens.

Nun möchte ich den alten Dateinamen mit dem Dateinamen aus der InputBox überschreiben.

Leider bekomme ich hier die Fehlermeldung: Datei nicht bekannt.

Weiß vielleicht jemand, was ich hier falsch mache?

pic1

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim strDatNam As String, strNewName As String, strZW As String
Dim strPath As String
Dim intZähler As Integer

strPath = ActiveSheet.Range("C1") & "\"  
strDatNam = Cells(ActiveCell.Row, 3)

If Intersect(Target, Range("C3:C5000")) Is Nothing Then Exit Sub  
Cancel = True
   
strNewName = InputBox("Dateiname ändern in", "Dateiname", "bearbeitet" & strDatNam)  

Name strPath & strDatNam As strPath & strNewName    ' hier erscheint die Fehlermeldung "Datei nicht bekannt"  


End Sub

Content-Key: 356943

Url: https://administrator.de/contentid/356943

Printed on: April 19, 2024 at 02:04 o'clock

Member: emeriks
emeriks Dec 04, 2017 at 10:27:41 (UTC)
Goto Top
Hi,
schau mal in E272
Der aktuelle Dateipfad hat da noch ein "TestUnterOrdner" drin.

E.
Member: emeriks
Solution emeriks Dec 04, 2017 at 10:36:52 (UTC)
Goto Top
War das die Lösung?
Member: mreske
mreske Dec 04, 2017 at 10:43:41 (UTC)
Goto Top
Ja das habe ich zwischenzeitlich auch gemerkt.
Jetzt stellt sich mir aber die Frage, wie ich dem Makro erkläre wie der Pfad (ohne Dateinamen) heißt.
Wie hieße der Quellcode für das Splitten des Pfades in Spalte D ?
Danke
Member: emeriks
emeriks Dec 04, 2017 at 10:50:11 (UTC)
Goto Top
  DirectoryPath = Mid( FilePath , 1 , InStrRev( FilePath , "\" ) )  
Mitglied: 134464
134464 Dec 04, 2017 updated at 11:32:59 (UTC)
Goto Top
Set fso = CreateObject("Scripting.FilesystemObject")  
pfadOhneDateiname = fso.GetParentFolderName("c:\pfad\datei.txt")  
Member: emeriks
emeriks Dec 04, 2017 updated at 10:57:09 (UTC)
Goto Top
@specht
GetAbsoutePathName liefert in Deinem Beispiel aber den kompletten Pfad der Datei. @mreske sucht aber den Pfad des Verzeichnisses. Und außerdem: Die Fragestellung suggeriert mir, dass man hier besser bei den Basics bleiben sollte. face-wink
Mitglied: 134464
134464 Dec 04, 2017 updated at 11:00:12 (UTC)
Goto Top
Sorry, war GetParentFolderName, korrigiert ...
Die Fragestellung suggeriert mir, dass man hier besser bei den Basics bleiben sollte.
Was sind daran keine Basics face-big-smile?! Eher unterste Schublade...
Member: emeriks
Solution emeriks Dec 04, 2017 at 11:06:14 (UTC)
Goto Top
Was sind daran keine Basics ?! Eher unterste Schublade...
Ich weiß jetzt nicht, wie hoch Deine Schränke stehen. Aber wenn jemand nach einfache String-Operationen fragt, dann sollte man es doch einfach halten und rein mit VBA-Mitteln antworten. Sonst lernt er/sie doch nichts.
Member: mreske
mreske Dec 04, 2017 updated at 11:10:00 (UTC)
Goto Top
Vielen Dank emeriks,

genau das wars, was ich gesucht habe:
DirectoryPath = Mid(FilePath, 1, InStrRev(FilePath, "\"))

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim strDatNam As String, strNewName As String, strZW As String
Dim strPath As String
Dim intZähler As Integer

Dim FilePath
Dim DirectoryPath

Dim Pfad
Dim fso

strPath = ActiveSheet.Range("C1") & "\"  
strDatNam = Cells(ActiveCell.Row, 3)
FilePath = Cells(ActiveCell.Row, 4)

If Intersect(Target, Range("C3:C5000")) Is Nothing Then Exit Sub  
Cancel = True

DirectoryPath = Mid(FilePath, 1, InStrRev(FilePath, "\")) ' zeigt den Pfad OHNE Dateinamen an (ausgelesen aus der aktiven Zelle, Spalte D)  

strNewName = InputBox("Dateiname ändern in", "Dateiname", "_" & strDatNam)  

Name DirectoryPath & strDatNam As DirectoryPath & strNewName    ' hier erscheint die Fehlermeldung "Datei nicht gefunden"  

End Sub

Tausend Dank
Mitglied: 134464
134464 Dec 04, 2017 updated at 11:31:58 (UTC)
Goto Top
dann sollte man es doch einfach halten und rein mit VBA-Mitteln antworten. Sonst lernt er/sie doch nichts.
Das ist reines VBA. Und davon lernen kann er auch was face-smile.
Member: mreske
mreske Dec 04, 2017 at 11:37:10 (UTC)
Goto Top
ja, habe definitiv wieder was gelernt hier,
besten Dank euch beiden
Gruß
Mre
Member: emeriks
emeriks Dec 04, 2017 at 12:16:17 (UTC)
Goto Top
Das ist reines VBA.
Nein!
Mitglied: 134464
134464 Dec 04, 2017 updated at 12:38:45 (UTC)
Goto Top
Du meinst vielleicht ohne weitere Systembibliotheken, aber das Filesystemobject ist auf jedem Windows PC vorhanden. Somit ist das Definitionssache.
Wenn also mit reinen VBA Sprachinternen Befehlen dann hast du recht.
Von der Funktion her ist es aber VBA funktionsfähiger Code und woanders als auf einem Windows System wird er es sicher nicht ausführen face-smile.