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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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-ID: 356943

Url: https://administrator.de/forum/dateinamen-per-vba-marko-aendern-356943.html

Ausgedruckt am: 10.04.2025 um 20:04 Uhr

emeriks
emeriks 04.12.2017 um 11:27:41 Uhr
Goto Top
Hi,
schau mal in E272
Der aktuelle Dateipfad hat da noch ein "TestUnterOrdner" drin.

E.
emeriks
Lösung emeriks 04.12.2017 um 11:36:52 Uhr
Goto Top
War das die Lösung?
mreske
mreske 04.12.2017 um 11:43:41 Uhr
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
emeriks
emeriks 04.12.2017 um 11:50:11 Uhr
Goto Top
1
  DirectoryPath = Mid( FilePath , 1 , InStrRev( FilePath , "\" ) )  
134464
134464 04.12.2017 aktualisiert um 12:32:59 Uhr
Goto Top
1
2
Set fso = CreateObject("Scripting.FilesystemObject")  
pfadOhneDateiname = fso.GetParentFolderName("c:\pfad\datei.txt")  
emeriks
emeriks 04.12.2017 aktualisiert um 11:57:09 Uhr
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
134464
134464 04.12.2017 aktualisiert um 12:00:12 Uhr
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...
emeriks
Lösung emeriks 04.12.2017 um 12:06:14 Uhr
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.
mreske
mreske 04.12.2017 aktualisiert um 12:10:00 Uhr
Goto Top
Vielen Dank emeriks,

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
134464
134464 04.12.2017 aktualisiert um 12:31:58 Uhr
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.
mreske
mreske 04.12.2017 um 12:37:10 Uhr
Goto Top
ja, habe definitiv wieder was gelernt hier,
besten Dank euch beiden
Gruß
Mre
emeriks
emeriks 04.12.2017 um 13:16:17 Uhr
Goto Top
Das ist reines VBA.
Nein!
134464
134464 04.12.2017 aktualisiert um 13:38:45 Uhr
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.