Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    cercare e contare file da cartelle e subcartelle

    Salve ragazzi, ho preso vari spunti da questo forum ed ho deciso di unirmi a voi per cercare aiuto nelle mie lacune.
    Mi spiego:
    Mi servirebbe un codice in VBA che mi conta tutti i tipi di files in un folder e me li elenca in una listbox.
    Io ho una userform che in "inzialize" mi vede la dir da me assegnata e mi aggiunge ad una combobox la i titoli di tutte le subdir. Inoltre vorrei che mi apparisse nella listbox sotto, l'elenco di tutti i files in quella directory. Così, usando la combobox come filtro se entro in una subdir mi dovrà apparire il nuovo elenco dei file e così via fino a 4 combobox che saranno i miei 4 filtri.
    Inoltre sulla listbox al "click" si dovrà aprire il file selezionato. Come un iperlink in excel.
    Fin ora sono arrivato ai filtri delle cartelle ed al numero dei files ma proprio non so come aggiungere i files in una listbox e come aprirli al click.

    Spero di essere stato chiaro

    e ringrazio tutti anticipatamente per l'aiuto.

    Saluti

    Peppe

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461

    Moderazione

    Originariamente inviato da mimomo1970
    Fin ora sono arrivato ai filtri delle cartelle ed al numero dei files ma proprio non so come aggiungere i files in una listbox e come aprirli al click.
    Posta il codice che hai scritto sino a ora, o almeno le sue parti rilevanti e utili per eventuali integrazioni da parte di altri.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ecco il codice che ho fatto per iniziare:

    Questo codice legge la cella attiva e mi restituisce i nomi delle subfolders da "A2" in poi.
    -----------------------------------------------------------------------------------
    Private Sub Workbook_Open()
    Dim MyPath, MioFile
    Sheets("Foglio1").Range("A1").Select
    MyPath = ActiveSheet.Cells(1, 1)
    MioFile = MyPath & "\" & "*.*"
    MyName = Dir(MioFile, vbDirectory)
    rg = 1
    Do While MyName <> ""
    If MyName = ".." Then GoTo lab1
    rg = rg + 1
    lab1: MyName = Dir
    ActiveSheet.Cells(rg, 1) = MyName
    Loop
    UserForm1.Show
    End Sub
    --------------------------------------------------------------------------------------
    Questa invece al lancio della userform mi aggiunge le subfolders nella prima combobox e mi conta tutti i files presenti in tutte le subfolders.
    --------------------------------------------------------------------------------------
    Private Sub UserForm_Initialize()
    Dim x
    x = Range("A1").End(xlDown).Address
    Range(x).Select
    n = ActiveCell.Row
    cv = 0
    For x = 2 To n
    cv = cv + 1
    ComboBox1.AddItem Cells(x, 1)
    Next
    Set fs = Application.FileSearch
    TipoFilesSearch = "*.*"
    DirSearch = Range("A1")
    With fs
    .LookIn = DirSearch
    .SearchSubFolders = True
    .Filename = TipoFilesSearch
    If .Execute > 0 Then
    UserForm1.Label1.Caption = "Ho trovato " & .FoundFiles.Count & " file(s)"
    Else
    MsgBox "Non ho trovato alcune file(s)"
    End If
    End With
    End Sub

    -------------------------------------------------------------------------------------
    e questo codice mi aggiunge le subfolders secondarie filtrando una subfolder primaria ed ovviamente mi conta i files a scalare.
    -------------------------------------------------------------------------------------
    Private Sub ComboBox1_Change()
    Range("B1:B1000").ClearContents
    ComboBox2.Clear
    Range("B1") = Range("A1") & "\" & ComboBox1.Text
    Dim MyPath, MioFile
    MyPath = ActiveSheet.Cells(1, 2)
    MioFile = MyPath & "\" & "*.*"
    MyName = Dir(MioFile, vbDirectory)
    rg = 1
    Do While MyName <> ""
    If MyName = ".." Then GoTo lab1
    rg = rg + 1
    lab1: MyName = Dir
    ActiveSheet.Cells(rg, 2) = MyName
    Loop

    Dim x
    x = Range("B1").End(xlDown).Address
    Range(x).Select
    n = ActiveCell.Row
    cv = 0
    For x = 2 To n
    cv = cv + 1
    ComboBox2.AddItem Cells(x, 2)

    Next

    Set fs = Application.FileSearch
    TipoFilesSearch = "*.*"
    DirSearch = Range("B1")

    With fs
    .LookIn = DirSearch
    .SearchSubFolders = True
    .Filename = TipoFilesSearch
    If .Execute > 0 Then
    UserForm1.Label1.Caption = "Ho trovato " & .FoundFiles.Count & " file(s)"
    Else
    MsgBox "Non ho trovato alcune file(s)"
    End If
    End With

    End Sub


    Adesso vorrei capire come fare a far uscire sulla listbox i files contati e se possibile renderli attivi al click come un collegamento ipertestuale.

    Non fate caso al codice sicuramente sbagliato, non sono un programmatore ma prendo spunti da internet e mi diletto, quindi sarà sicuramente pieno di errori ed è per questo che chiedo il vostro aiuto.

    Ciao a tutti

    Peppe

  4. #4
    Salve ragazzi,
    problema risolto. Era sotto gli occhi e non lo vedevo.
    Questo è il codice che ho fatto e funziona!!!!!

    Adesso qualche anima PIA saprebbe dirmi come ricavare solo il nome e non tutto il percorso?????

    Sono proprio imbranato!!!!

    Sub CercaFile()

    Set fs = Application.FileSearch
    With fs
    .LookIn = "Y:\07-QAQC\TAD Document System"
    .SearchSubFolders = True
    .Filename = "*.*"
    If .Execute > 0 Then
    For i = 1 To .FoundFiles.Count
    file = .FoundFiles(i)
    UserForm1.Label1.Caption = "Found " & .FoundFiles.Count & " file(s)"
    UserForm1.ListBox1.AddItem .FoundFiles(i)
    Next i
    End If
    End With

    End Sub

  5. #5
    Ciao a tutti,
    Visto che nessuno mi da una mano e sicuramente perchè i miei codici fanno ridere, vi posto l'ultimo pezzo che mancava. Sicuramente il codice è tortuoso ma alla fine mi funziona ed ho risolto il problema.
    Ovviamente accetto vivamente correzioni e migliorie da chiunque.


    Set FS = Application.FileSearch
    TipoFilesSearch = "*.*"
    DirSearch = Sheets("Foglio1").Range("B1") 'percorso scritto in B1 in modo da poterlo cambiare a piacimento senza entrate nel codice.

    With FS
    .LookIn = DirSearch
    .SearchSubFolders = True
    .Filename = TipoFilesSearch
    If .Execute > 0 Then
    For i = 1 To .FoundFiles.Count
    y = .FoundFiles(i)
    Set fn = CreateObject("Scripting.FileSystemObject")
    Set nome = fn.Getfile(y)
    pippo = 0
    pippo = pippo + 1
    ActiveCell.Offset(pippo, 0).Select
    cella = ActiveCell.Address
    With ActiveSheet
    .Hyperlinks.Add .Range(cella), y
    End With

    f = nome.Name
    UserForm1.Label1.Caption = "Found " & .FoundFiles.Count & " file(s)"
    UserForm1.ListBox1.AddItem f
    Next i
    End If
    End With

    Set FS = Nothing
    Set fn = Nothing
    Set nome = Nothing

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.