Aprire cartella con titolo variabile



  • Aprire cartella con titolo variabile
    di ElCidCampeador data: 12/09/2015 15:05:17

    Buongiorno,

    vorrei sviluppare un pezzo di codice VBA che, dato un input esterno, mi aprisse la cartella che contiene nel nome quel valore di input. Ad esempio voglio che mi apra "...input 45234" ma anche "...input verza", l'importante è che inizi con una parola che inserisce l'utente. Nota bene: la seconda parte del nome della cartella NON è un numero progressivo, ma solitamente numeri o lettere casuali.
    Si tenga conto che la cartella che in realtà vorrei aprire si chiama WB. Tale cartella è contenuta in un'altra cartella, il cui nome però è variabile come detto prima. In pratica so che questa cartella WB è contenuta a sua volta in un'altra cartella che contiene all'inizio del suo nome il valore input: il problema è che non so come finisce!
    Ho provato a sviluppare un codice, che riporto, ma mi apre solo la cartella noto l'indirizzo esatto. Chi sa come correggerlo? Grazie!

     
    Sub apriWB()
    textbox1 = Range("D7")  ' input dell'utente, ovvero come comincia il nome della cartella da aprire
        Dim FolderPath As String
        Dim TestStr As String
        FolderPath = "C:" & textbox1 & "WB"  'la cartella col nome variabile contiene a sua volta una cartella dal nome esatto che devo aprire, che si chiama WB
        
        If Right(FolderPath, 1) <> "" Then
            FolderPath = FolderPath & ""
        End If
    
        TestStr = ""
        On Error Resume Next
        TestStr = Dir(FolderPath)
        On Error GoTo 0
          
            If Dir$(FolderPath) = "" Then
        MsgBox "La cartella non esiste."
    Else
       
        
          Shell "c:windowsexplorer.exe " & FolderPath, vbNormalFocus
    
    End If
    End Sub
    
    
    



  • di patel data: 12/09/2015 15:55:57

    prova un codice di questo tipo
     
    Sub Opendialog()
    cartellainiziale ="F:Documentiexcelfile"
        With Application.FileDialog(msoFileDialogOpen)
            .InitialFileName = cartellainiziale
            .Title = "Seleziona cartella e File"
            .AllowMultiSelect = False
            .Show
            If .SelectedItems.Count = 0 Then Exit Sub   
            strFile = .SelectedItems(1)
        End With
          Set mybook = Workbooks.Open(strFile)
    End Sub






  • di ElCidCampeador (utente non iscritto) data: 12/09/2015 18:27:34

    Grazie, ma non è questo il punto. Io in ingresso tramite una cella di excel vorrei inserire il nome della cartella, che chiamiamo per comodità "input". Una volta inserito, vorrei che mi si apra automaticamente il percorso "C:input BOHWB", dove "input BOH" intendo la cartella di cui so il nome parziale (per l'appunto la parola "input"). La cartella WB, contenuta nella cartella di cui non so il nome, esiste e non è un problema. Come non è un problema il fatto di attivare la macro. Il problema vero semmai è costringere il programma ad aprire proprio quel percorso, e non riesco a capire cosa dargli in pasto. Ho già provato a usare il carattere jolly "*" tipo "C:input" & "*" & "WB", ma non funziona!



  • di Vecchio Frac data: 14/09/2015 09:18:26

    Mi sono permesso di apportare qualche variazione. Ho aggiunto in calce una function che restituisce il primo percorso trovato che contenga la directory parziale indicata in D7.
     
    Option Explicit
    
    Sub apriWB()
    Dim textbox1 As String
    Dim FolderPath As String
    Dim s As String
        
        textbox1 = Range("D7")  ' input dell'utente, ovvero come comincia il nome della cartella da aprire
        s = find_subfolder("C:" & textbox1 & "*")
        If s = "" Then
            MsgBox "Nessuna directory contiene " & textbox1
            Exit Sub
        End If
        FolderPath = "J:" & s  'la cartella col nome variabile contiene a sua volta una cartella dal nome esatto che devo aprire, che si chiama WB
        
        Shell "c:windowsexplorer.exe " & FolderPath & "WB", vbNormalFocus
    End Sub
    
    
    Function find_subfolder(partial_path As String) As String
    Dim myfile As String, mypath As String, match As String
        
        On Error Resume Next
        myfile = Dir(partial_path & "*", vbDirectory)
    
        Do While Len(myfile) > 0
            If Left(myfile, 1) <> "." Then
                If (GetAttr(myfile) And vbDirectory) = vbDirectory Then
                    match = myfile
                    Exit Do
                End If
            End If
            myfile = Dir
        Loop
    
        find_subfolder = match
        
    End Function
    






  • di ElCidCampeador data: 14/09/2015 23:23:56

    Grazie mille! Effettivamente la funzione Dir non mi era venuta in mente