2016-04-11 10 views
0

Ich habe ein Problem, bei dem ich einen Dateinamen aus einem Pfad entfernen muss, den Code jedoch nicht richtig ermitteln kann.Sie müssen Zahlen aus einer Dateinamen-Zeichenfolge entfernen, um den Speicherort zu ändern.

Ein Beispieldateiname wäre C: \ Getested Teile \ 001-1099-01.slddrw. Ich muss das "001-1099-01" extrahieren. Portion. Die Dateiposition auf der linken Seite könnte alles sein und die einzigen Konstanten im Dateinamen sind der "001-" Teil (auf den ich hinweisen sollte, könnte wiederholen wenn der Dateiname 001-1001-03 wäre) und der ".slddrw". Ansonsten könnte der Dateiname "001-10999-03-02-01" heißen.

Ich habe einfach die slddrw Teil abgestreift, habe ich versucht, Funktionen der rechten und InStr den Rest abzustreifen, aber ich denke, dass InStr nur mit Buchstaben funktioniert (beliebig viele Beispiele sowieso nicht finden konnte)

Antwort

0

Ich glaube, das ist was Sie suchen:

Public Sub test() 

Dim strFileName As String 

'Your sample file name 
strFileName = "C:\Checked out parts\001-1099-01.slddrw" 

'Search for the first occurance of \ in the reversed (!) file name 
' if you substract this result from the length of the string 
' you know where to start (+ 2 to avoid the \ itself) 
strFileName = Mid(strFileName, Len(strFileName) - InStr(1, StrReverse(strFileName), "\") + 2) 

'Remove the .slddrw portion from the end 
strFileName = Replace(strFileName, ".slddrw", "") 

'Done 
Debug.Print strFileName 

End Sub 

Beachten Sie die Kommentare im Code für weitere Informationen.

+0

Dank! Der erste Teil funktionierte gut, aber die Ersatzfunktion funktionierte nicht. Ich verwendete strFileName = Links (strFileName, Len (strFileName) - 6) und das funktioniert gut. – user2638690

+0

Seltsam, dass 'Ersetzen' nicht funktionieren würde. Aber in diesem Fall würde ich lieber 'strFileName = Split (strFileName,". ") (0)' wie in der Lösung von @Oligg angegeben verwenden. – Ralph

0

Sie können ein Sub verwenden, in dem Sie den Pfad und die Erweiterung Ihrer Datei definieren und den Dateinamen angeben.

Sub getFileName() 
Dim myString() As String 
Dim path As String, extension As String 
Dim fileName As String 

path = "C:\Checked out parts\" 
extension = ".slddrw" 
'Say your string is in cell A1 
myString = Split(Range("A1"), path) 
fileName = Split(myString(1), extension)(0) 

MsgBox fileName 'fileName can be used elsewhere after 
End Sub 

Sie können es auch tun, als eine Funktion:

Function getFileName(cel As Range, path As String, extension As String) 
Dim myString() As String 

myString = Split(cel, path) 
getFileName = Split(myString(1), extension)(0) 
End Function 

Wenn Sie den Pfad und Erweiterungen gespeichert in Zellen haben, können Sie diese Funktion nutzen zu können:

Function getFileName2(cel As Range, path As Range, extension As Range) 
Dim myString() As String 

myString = Split(cel, path) 
getFileName2 = Split(myString(1), extension)(0) 
End Function 

Das sind die Optionen, die ich mir vorstellen kann, hoffe, es hilft.

EDIT:

Wenn Sie den Pfad nicht kennen, noch die Erweiterung, können Sie diese stattdessen verwenden:

myString = Split(Range("A1"), "\") 
fileName = Split(myString(UBound(myString)), ".")(0) 
+0

Sie können die Zeichenfolge immer durch \ teilen und den letzten Teil verwenden, da es niemals ein \ in einem Dateinamen oder einer Erweiterung gibt – Oligg

Verwandte Themen