2017-12-12 2 views
1

Ich mache ein VBA-Makro für Excel und ich muss den Teil eines Dateipfads, der mit einer bestimmten Zeichenfolge übereinstimmt.Get Teil der Zeichenfolge, die mit einer anderen Zeichenfolge übereinstimmt

ich meine, ich habe ein VariantFileInfo genannt, die den Pfad der Arbeitsmappe enthält, die ich in diesem Moment bin mit (in einem For), können beispielsweise Variante wie folgt aussehen:

C:\Users\myUser\Desktop\SVN-Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx 

Ich möchte Um eine Funktion zu erstellen, die nur den Teil des Pfads zurückgibt, der mit "INC*" übereinstimmt und wenn der Pfad diese Übereinstimmung nicht aufweist, geben Sie null zurück.

So ist die Funktion in diesem Fall zurückkehren: INC20825

ich schon versucht, diese aber nicht

'This function returns the INC folder where is contained 
Function INCFolder(FileInfo As Variant) 
Dim i As Integer 

If FileInfo Like "INC*" Then 
    i = InStr(FileInfo, "INC") 
    INCFolder = Mid(FileInfo, i, 8) 
Else 
    INCFolder = Null 
End If 

End Function 

EDIT mit Teillösung nicht funktioniert: Ich habe es arbeiten, um die 8-Zeichen zu erhalten von INC* mit dem folgenden Code:

'This function returns the INC folder where is contained 
Function INCFolder(FileInfo As Variant) 
Dim i As Integer 

i = InStr(FileInfo, "INC") 

If i = 0 Then 
    INCFolder = Null 
Else 
    INCFolder = Mid(FileInfo, i, 8) 
End If 

End Function 

Probleme wird kommen, wenn INC größer oder kleiner ist als 8

+0

Wurde die ** 'INC' ** Teil immer auf dem Weg 8 Zeichen haben? Ich würde es dynamischer machen – Zac

+0

Ja, es kann nicht 8 Zeichen haben, aber ich weiß nicht, wie man es dynamischer macht –

+0

@ Pablo.x siehe meine Antwort unten, es wird Ihnen Flexibilität geben, dynamischer zu sein und flexibel mit zu sein beliebig viele Zeichen –

Antwort

1

Sie können Split verwenden Ihre \ von Ihrem vollständigen Pfad zu PathArr Array-Elemente zu trennen, und dann Schleife durch PathArr Elemente und suchen Sie nach "INC".

Der folgende Code wird Ihnen Flexibilität bei der Anzahl der Zeichen, die Sie für „INC“ haben.

-Code

Option Explicit   

Sub test() 

Const FullName = "C:\Users\myUser\Desktop\SVN-Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx" 
Dim INCSection As String 

INCSection = INCFolder(FullName) 

End Sub 

Function INCFolder(FileInfo As Variant) As String 

    Dim i As Long 
    Dim PathArr As Variant 

    If FileInfo Like "*INC*" Then 
     PathArr = Split(FileInfo, "\") ' split folders to array 

     For i = 0 To UBound(PathArr) ' loop through array and look for "*INC*" 
      If PathArr(i) Like "*INC*" Then 
       INCFolder = PathArr(i) 
       Exit Function 
      End If 
     Next i 
    Else 
     INCFolder = "Error!" 
    End If 

End Function 
+0

Arbeitete großartig, vielen Dank für Ihre Antwort, das ist, was ich versuchte. –

+0

@ Pablo.x du bist willkommen :) –

+0

Das ist genau das, was ich vorgeschlagen habe – Zac

1

Nur noch ein * in der hinzufügen Like:

Option Explicit 

Public Const pathName = "C:\Folder\trunk\G\INC20825\Estimación Temporal_v01r00.xlsx" 


Function INCFolder(FileInfo As Variant) 
    Dim i As Long 

    If FileInfo Like "*INC*" Then 
     i = InStr(FileInfo, "INC") 
     INCFolder = Mid(FileInfo, i, 8) 
    Else 
     INCFolder = False 
    End If 

End Function 
+0

Dies funktioniert auch, ich habe gerade meine Frage bearbeitet, weil ich einen Weg fand, es für 8 Zeichen arbeiten zu lassen –

1

Gerade der alternative Weg, um das Ergebnis zu erhalten

Function INCFolder(FileInfo As Variant) 
    If FileInfo Like "*INC*" Then 
     INCFolder = Mid(WorksheetFunction.Substitute(Mid(FileInfo, InStr(FileInfo, "\INC"), Len(FileInfo)), "\", "|", 2), 2, WorksheetFunction.Search("|", WorksheetFunction.Substitute(Mid(FileInfo, InStr(FileInfo, "\INC"), Len(FileInfo)), "\", "|", 2)) - 2) 
    Else 
     INCFolder = Null 
    End If 
End Function 
Verwandte Themen