Oggetto filedialog

di il
4 risposte

Oggetto filedialog

Buongiorno

tempo fa creai un funzione per utilizzare l'oggetto filedialog in diverse routine della mia applicazione

Adesso vorrei rendere più efficente la funzione parametrizzando sia la cartella dove cercare il file, sia il filtro per il tipo di file da cercare.

in esecuzione mi da errore: “numero errato di argomenti o assegnazione non valida” sul filtro

per cortesia mi date una suggerimento.

nomefile = CercaFile("C:\BOLLE ELETTRONICHE", "File XLSX", "*.XLSX")

Public Function CercaFile(percorso As String , tipo As String)
Dim fd As Office.FileDialog

Set fs = CreateObject("Scripting.FileSystemObject")


Set fd = Application.FileDialog(msoFileDialogFilePicker)
   
 With fd
   
   .AllowMultiSelect = False
   .Title = "TITOLO"
   .ButtonName = "SELEZIONA"
   .InitialFileName = percorso 
   .InitialView = msoFileDialogViewPreview
   .Filters.Add tipo, 1
   .Show
   CercaFile = .SelectedItems(1)
   
  
 End With

End Function

4 Risposte

  • Re: Oggetto filedialog

    Inserisci il codice tra i tag CODE (pulsante con <>)

    Nella chiamata scrivi

    nomefile = CercaFile("C:\BOLLE ELETTRONICHE", "File XLSX", "*.XLSX")

    indicando 3 parametri e nella dichiarazione

    Public Function CercaFile(percorso As String , tipo As String)

    ne prevedi solo 2 

    E' ovvio che non va

  • Re: Oggetto filedialog

    Sicuramente il problema è la virgola.

    I parametri sono due solo che il filtro dell'oggetto filedialog prevede questa sintassi :

    < .Filters.Add "descrizione del tipo di file", "*.xlsx">

    ho provato con i doppio apice ma non funziona 

  • Re: Oggetto filedialog

    Ma che c'entra? Quindi i parametri sono 3 e li devi dichiarare tutti

    nomefile = CercaFile("C:\BOLLE ELETTRONICHE", "File XLSX", "*.XLSX")
    Public Function CercaFile(percorso As String , tipo As String, mask As String)

    e quindi

    Filters.Add tipo, mask
  • Re: Oggetto filedialog

    22/09/2023 - riddik ha scritto:


    vorrei rendere più efficente la funzione

    Aggiungo un aspetto che non è trattato nel thread: la necessità del riferimento alla libreria di Office per l'uso di FileDialog e delle costanti correlate.

    Almeno in distribuzione usa il latebinding

    Dim fd As Object
    Const cMsoFileDialogFilePicker = 3
    Const cMsoFileDialogViewPreview = 4
    
    Set fd = Application.FileDialog(cMsoFileDialogFilePicker)
    ...
       .InitialView = cMsoFileDialogViewPreview

    https://learn.microsoft.com/en-us/office/vba/api/office.msofiledialogtype

    https://learn.microsoft.com/en-us/office/vba/api/office.msofiledialogview

    Tornando invece al contenuto del thread, se intendi applicare più di un filtro alla finestra di selezione allora la funzione che hai creato deve essere rivista, perché puoi avere un numero indefinito di accoppiate “descrizione - elenco estensioni”. Devi costruirti un modello filtri che sia analizzabile ad esempio con Split o usare InStr e Mid con furbizia.

    Potrebbe essere qualcosa del tipo “descrizione1|elencoestensioni1|descrizione2|elencoestensioni2|descrizione3|elencoestensioni3”. A te l'opera di “decodifica” di quella stringa trasformandola in parametri del metodo Add dei filtri.

Devi accedere o registrarti per scrivere nel forum
4 risposte