VBA / Excel - percorso scoperta per il salvataggio di un file, ma corrisponde solo una certa parte del percorso

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

  •  09-10-2019
  •  | 
  •  

Domanda

Mi piacerebbe salvare un file nella cartella seguente esempio:

C:\MainFolder\Subfolder1\Subfolder2\Subfolder3_A_abc_123

Ci sono altre sottocartelle nella cartella in cui mi piacerebbe il file da salvare, come:

Subfolder_B_xyz_456

Subfolder_C_rst_789

etc

Il fatto è che voglio trovare una cartella sul percorso tutta la strada fino a: "Subfolder3_", la "A" viene prelevato da un intervallo in un lenzuolo e la "_abc_123", io non voglio da abbinare.

Qualcuno ha un esempio UST intelligente o altro sollution creativo? Sono nuovo di programmazione in modo che qualsiasi suggerimento è apprezzato.

Grazie in anticipo.

PythonStyle


domanda aggiornato per HO1:

Questo è il codice:

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

sto errore ottenendo in questa linea:

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

La prego di dare un'occhiata a questo? I nomi delle cartelle e cartelle di lavoro sono cambiati in modo che potrebbero non ha alcun senso. Solo la parte cartella è importante.

Grazie in anticipo.

Rgds

È stato utile?

Soluzione

Si può solo scorrere tutte le sottodirectory e per ogni directory si confronta con il percorso che si desidera trovare. Qualcosa di simile a questo pseudo codice dovrebbe funzionare:

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

Un altro, simile, l'opzione sarebbe quella di utilizzare le espressioni regolari, che sono più potenti di Like, ma non credo che avresti bisogno. Tuttavia, nel caso in cui, si possono trovare informazioni su di esso qui: Come utilizzare le espressioni regolari in Visual Basic

Altri suggerimenti

sbagliato nulla con la soluzione distaccati. Ho solo pensato che avrei anche inviare un'altra alternativa usando la funzione Dir(), che dovrebbe essere un po 'più veloce - soprattutto se si hanno un sacco di sottodirectory per la ricerca.

vale a dire.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top