outlook-vba 3.4 Elenco dei nomi di ogni cartella in ogni negozio accessibile


Esempio

Nella parte 2, ti è stato mostrato come elencare ogni archivio accessibile e le cartelle di livello superiore all'interno di ogni negozio. Ciò comportava un ciclo attraverso i negozi e quindi un ciclo per ogni negozio attraverso le sue cartelle. Sopra hai visto come fare riferimento a una cartella conosciuta a qualsiasi profondità all'interno della gerarchia delle cartelle. Ciò ha comportato il concatenamento di tutte le Folders("x") necessarie per raggiungere la cartella.

Ora voglio elencare ogni cartella, a qualsiasi profondità, all'interno di ogni negozio. La tecnica di codifica più semplice per risolvere questo tipo di problema in cui è necessario spostare catene di lunghezze diverse è la ricorsione . Se sei un programmatore serio in un'altra lingua o strumento, potresti già conoscere la ricorsione. Se hai ambizioni di essere un programmatore serio, alla fine dovrai capire la ricorsione, ma non necessariamente oggi. "La ricorsione" è uno di quei concetti che molti trovano difficile da afferrare all'inizio. Puoi digitare "Ricorsione" nel tuo motore di ricerca preferito e leggere i vari tentativi di spiegare questo concetto. In alternativa, puoi accettare questi macro lavori, ma non preoccuparti di come funzionano.

Nota il commento in ListStoresAndAllFolders() : queste macro richiedono un riferimento a "Microsoft Scripting Runtime". Fai clic su Strumenti nella barra delle schede nella parte superiore della finestra di VB Editor, quindi fai clic su Riferimenti . Otterrai un elenco di tutti i riferimenti disponibili (librerie). Alcuni in cima saranno già spuntati. Il resto è in ordine alfabetico. Scorri l'elenco e fai clic sulla casella a sinistra di "Microsoft Scripting Runtime" per ottenere un segno di spunta. Quindi fare clic su OK

 Sub ListStoresAndAllFolders()

  ' Displays the name of every accessible store
  ' Under each store, displays an indented list of all its folders

  ' Technique for locating desktop from answer by Kyle:
  ' http://stackoverflow.com/a/17551579/973283

  ' Needs reference to “Microsoft Scripting Runtime” if "TextStream"
  ' and "FileSystemObject" are to be recognised

  Dim FileOut As TextStream
  Dim FldrCrnt As Folder
  Dim Fso As FileSystemObject
  Dim InxFldrCrnt As Long
  Dim InxStoreCrnt As Long
  Dim Path As String
  Dim StoreCrnt As Folder

  Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  
  Set Fso = CreateObject("Scripting.FileSystemObject")
  Set FileOut = Fso.CreateTextFile(Path & "\ListStoresAndAllFolders.txt", True)

  With Application.Session
    For InxStoreCrnt = 1 To .Folders.Count
      Set StoreCrnt = .Folders(InxStoreCrnt)
      With StoreCrnt
        FileOut.WriteLine .Name
        For InxFldrCrnt = .Folders.Count To 1 Step -1
          Set FldrCrnt = .Folders(InxFldrCrnt)
          Call ListAllFolders(FldrCrnt, 1, FileOut)
        Next
      End With
    Next
  End With

  FileOut.Close

End Sub
Sub ListAllFolders(ByRef Fldr As Folder, ByVal Level As Long, ByRef FileOut As TextStream)

  ' This routine:
  '  1. Output name of Fldr
  '  2. Calls itself for each child of Fldr
  ' It is designed to be called by ListStoresAndAllFolders()

  Dim InxFldrCrnt As Long

  With Fldr
    FileOut.WriteLine Space(Level * 2) & .Name
    For InxFldrCrnt = .Folders.Count To 1 Step -1
      Call ListAllFolders(.Folders(InxFldrCrnt), Level + 1, FileOut)
    Next
  End With

End Sub

Dopo aver eseguito ListStoresAndAllFolders , sul tuo DeskTop sarà presente un nuovo file denominato "ListStoresAndAllFolders.txt" che conterrà l'elenco promesso di negozi e cartelle.