VBA / Excel - find Pfad zum Speichern einer Datei, sondern nur einen bestimmten Teil des Weges übereinstimmen

StackOverflow https://stackoverflow.com/questions/4439178

  •  09-10-2019
  •  | 
  •  

Frage

Ich möchte eine Datei in dem folgenden Beispiel Ordner speichern:

C:\MainFolder\Subfolder1\Subfolder2\Subfolder3_A_abc_123

Es gibt noch weitere Unterordner in dem Ordner, in dem ich die Datei gespeichert werden mag, wie:

Subfolder_B_xyz_456

Subfolder_C_rst_789

etc

Die Sache ist, dass ich einen Ordner auf dem Pfad den ganzen Weg bis finden wollen: „Subfolder3_“, das „A“ wird von einem Bereich in einem Blatt geholt werden und der „_abc_123“, ich will nicht, passen.

Hat jemand ein cleveres FSO Beispiel oder andere kreative sollution hat? Ich bin neu in der Programmierung so jede Anregung sehr geschätzt wird.

Dank auf Voraus.

PythonStyle


Aktualisiert Frage ho1:

Dies ist der Code:

Sub Create_WorkB_Input()

Dim wbBook1 As Workbook
Dim wbBook2 As Workbook
Dim shTemp1 As Worksheet
Dim shTemp2 As Worksheet
Dim shTemp_admin As Worksheet
Dim shTSSR_inp1 As Worksheet
Dim shTSSR_inp2 As Worksheet
Dim strVersion As String
Dim strPrep As String
Dim Datecr As Date
Dim strComment As String
Dim intBatch As Integer
Dim strSiteID As String
Dim strClusterID As String
Dim strPath As String
Dim fso As New FileSystemObject
Dim flds As Folders
Dim f As Folder

Set wbBook1 = Workbooks("Name_Input_TEMPLATE_v4.0.xls")
Set wbBook2 = Workbooks("Name_Input_To_xxx.xlsm")
Set shTemp1 = Workbooks("Name_Input_TEMPLATE_v4.0.xls").Sheets("TSSR_Input_sh1")
Set shTemp2 = Workbooks("Name_Input_TEMPLATE_v4.0.xls").Sheets("TSSR_Input_sh2")
Set shTSSR_inp1 = Workbooks("Name_Input_To_xxx.xlsm").Sheets("xxx")
Set shTSSR_inp2 = Workbooks("Name_Input_To_xxx.xlsm").Sheets("yyy")
Set shTemp_admin = Workbooks("Name_Input_TEMPLATE_v4.0.xls").Sheets("www")

shTSSR_inp1.UsedRange.Copy

shTemp1.Paste

shTSSR_inp2.UsedRange.Copy

shTemp2.Paste

intBatch = shTemp1.Range("AQ2").Value
strSiteID = shTemp1.Range("A2").Value
strClusterID = shTemp1.Range("B2").Value
strComment = InputBox(Prompt:="Insert comments.", Title:="INSERT COMMENTS", Default:="New site - batch " & intBatch & " ref email fr Me dato")

With shTemp_admin
    .Range("A18").FormulaR1C1 = "4.0"
    .Range("B18").Value = "John Doe"
    .Range("C18").Value = Date
    .Range("D18").Value = strComment
End With

strPath = "D:\Path_to_folder\folder1\folder2\folder3\folder4"

Set flds = fso.GetFolder(strPath & "\Folder5_Input_Batch_" & intBatch & "*")

For Each f In flds


    If f.Name Like strPath Then



        wbBook1.SaveAs Filename:="" + strPath + "\" + "TSSR_Input_" + strClusterID + "_" + strSiteID + "_v4.0.xls", _
                FileFormat:=xlNormal, _
                Password:="", _
                WriteResPassword:="", _
                ReadOnlyRecommended:=False, _
                CreateBackup:=False

    End If

Next

End Sub

Ich erhalte Fehler in dieser Zeile:

Set flds = fso.GetFolder(strPath & "\Folder5_Input_Batch_" & intBatch & "*")

Könnten Sie bitte einen Blick an ihm haben? Die Namen von Ordnern und Arbeitsmappen geändert werden, so dass sie keinen Sinn machen könnte. Nur der Ordner Teil ist wichtig.

Vielen Dank im Voraus.

Rgds

P

War es hilfreich?

Lösung

Sie konnte nur eine Schleife durch alle Unterverzeichnisse und für jedes Verzeichnis, das Sie es mit dem Pfad zu vergleichen, die Sie wollen finden. So etwas wie dieser Pseudo-Code sollte funktionieren:

For each dir in SubDirectories
  Dim lookingFor as String
  lookingFor = "Subfolder3_" & yourVariable & "*"
  If dir.Name Like lookingFor Then ' Note the use of the Like operator here so that it sees the * as a wildcard
    ' This is the right one
  End If
Next

Eine andere, ähnliche Möglichkeit wäre, reguläre Ausdrücke zu verwenden, die als Like mächtiger sind, aber ich glaube nicht, dass Sie brauchen würden. Allerdings nur für den Fall, können Sie Informationen über sie finden sich hier: Wie Reguläre Ausdrücke in Visual Basic verwenden

Andere Tipps

Nichts falsch mit der entsandte Lösung. Ich dachte nur, ich würde auch eine andere Alternative poste Dir()-Funktion, die ein wenig schneller sein sollte - vor allem, wenn Sie eine Menge Verzeichnisse zu suchen.

d.

Dim strFoundDir as String

strFoundDir=dir("C:\MainFolder\Subfolder1\Subfolder2\SubFolder3*" & SomeVariable & "*", vbDirectory)
    if lenb(strFoundDir)>0 then
        'Do the rest of your code
    end if
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top