Jag jobbar med ett projekt där jag behöver läsa av alla mailboxar och deras underkataloger. Jag kan inte komma på hur jag ska göra för att programmet automatiskt ska gå djupare hela tiden och sen på nåt sätt få fram vad som ligger under vilken katalog. Exempel på hur jag skulle vilja få fram det är:
Root 1.0
Katalog1 (1.1)
Underkatalog (1.1.1)
Ytterligare underkatalog (1.1.1.1)
Underkatalog2 (1.1.2)
Ytterligare Underkatalog (1.1.2.1)
Katalog2 (1.2)
Underkatalog1 (1.2.1)
osv...
Jag skulle vilja ha nåt i stil med det så att varje InfoStore hamnar som en root och sen underkatalogerna efter det. Som jag har skrivit koden nu så får jag fram 2 nivåer djupt men jag vill komma på nåt sätt så att programmet automatiskt går så djupt som det är. Om det finns 5 underkataloger vill jag att den ska hitta alla.
Koden som jag har nu ser ut såhär:
Dim MyInfoStore As InfoStore
Dim MyFolder As MAPI.Folder
Dim strTemp As String
For Each MyInfoStore In s.InfoStores
strTemp = strTemp & "InfoStore:" & MyInfoStore.Name
For Each MyFolder In MyInfoStore.RootFolder.Folders
strTemp = strTemp & "Folder:" & MyFolder.Name
Next MyFolder
Next MyInfoStore
frmMain.SendData strTemp
Tacksam för all hjälp jag kan få.
Har funderat på att skapa en rekursiv funktion men jag lyckades aldrig få till något vettigt.
Ja, en rekursiv funktion för detta bör funka. Ett exempel som du antagligen behöver modifiera lite.
Public Sub BehandlaMapp(ByRef pMapp As MAPI.Folder)
Dim MyInfoStore As InfoStore
Dim MyFolder As MAPI.Folder
Dim strTemp As String
'Där du gör vad du ska
For Each MyInfoStore In pMapp
DoSomethingWithMyInfoStore
Next
'Där du gör dina rekursiva anrop
For Each MyFolder In pMapp.Folders
BehandlaMapp(MyFolder) 'Det rekursiva anropet
Next
End Sub
Så här brukar jag göra med FileSystemObject, och det funkar bra. Du får se hur det funkar med vad du nu håller på med.
Tack, det funkade hur bra som helst:-) Jag vidareutvecklade det hela en aning också... Det blev ganska så flashigt om jag får säga det själv. Allt blev bra när jag fick en putt i rätt riktning ;-)
Public Sub LoadTree()
Dim myIS As InfoStore
Dim myFolder As Folder
Dim myNode As Node
For Each myIS In myOutlook.InfoStores
Set myNode = frmConfig.TreeView1.Nodes.Add(, , myIS.ID, myIS.Name)
myNode.Tag = "IS"
For Each myFolder In myIS.RootFolder.Folders
EnumerateFolder myFolder, myIS
Next
Next
End Sub
Public Sub EnumerateFolder(myFolder As Folder, Parent)
Dim myFolder2 As Folder
Me.TreeView1.Nodes.Add Parent.ID, 4, myFolder.ID, myFolder.Name
For Each myFolder2 In myFolder.Folders
EnumerateFolder myFolder2, myFolder
Next
End Sub
La det i två funktioner istället för än men resultatet är det samma...
Tack Ulf!
252 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9