0
votes

Accéder à un dossier avec uniquement des numéros dans son nom de Outlook VBA?

Dans une hiérarchie de dossiers de boîte aux lettres existante, il existe un dossier contenant des sous-dossiers nommés "01", "05", "06", etc. Notez que les chiffres ne sont pas consécutifs: "02", "03", "04" sont manquants dans cet exemple. Dans mon code VBA, je dois vérifier si un dossier nommé, disent: "02" existe et non, créez-le.

J'ai actuellement (dépouillé au minimum): p>

Dim NameStr as String
NameStr="02"
On Error Resume Next
Set NewSubFolder = ContainerFolder.folders(NameStr)
On Error GoTo 0
If NewSubFolder Is Nothing Then
    Set NewSubFolder = ContainerFolder.folders.Add(NameStr)
End If


4 commentaires

À la recherche de mon sortie de débogage, je ne suis même pas sûr que la chaîne "02" soit interprétée comme le numéro de séquence du sous-dossier. Un pointeur à un sous-dosseur existant apparemment aléatoire semble être retourné.


Utilise l'élément de propriété aidant? Définir des newsfolder = ContainerFolder.LesFolders.Item (Nametr) ?


Je pense que j'avais l'article () à l'origine et l'a supprimé juste pour voir si cela fait une différence. Maintenant ajouté. Il n'y avait aucune différence.


Ne pas réellement aborder le problème racine, mais vous pouvez créer une fonction sur laquelle vous passez le dossier parent et le nom du sous-dossier que vous souhaitez rechercher: la fonction se bouclait sur les dossiers enfants, en vérifiant le nom de chacun d'un match, et Renvoie le sous-dossier correspondant (ou rien si aucun match).


3 Réponses :


0
votes

Le résultat de sur erreur CV Suivant code> est souvent du code de travail. Vous voudrez peut-être l'appliquer en dernier recours.

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration
'
' If desperate declare as variant

Sub createFolder_MinimalVerifiableExample_Dangerous_OnErrorResumeNext_TheOtherWay()

Dim containerFolder As folder
Dim newSubFolder As folder

Dim nameStr As String
nameStr = "03"

Set containerFolder = Session.GetDefaultFolder(olFolderInbox)

On Error Resume Next
' Bypass error if folder exixts
Set newSubFolder = containerFolder.folders.Add(nameStr)
On Error GoTo 0

End Sub


0 commentaires

0
votes

Les dossiers prend une chaîne représentant le nom du dossier ou juste un numéro d'index. Pour être sûr que vous obtiendrez le dossier, vous pouvez itérer sur tous les sous-dossiers et vérifier le nom du dossier. Suite de cette façon, vous pouvez être sûr que vous obtiendrez ce dont vous avez besoin.


0 commentaires

0
votes

Basé sur la réponse de Niton ainsi que sur les contributions des autres, voici ma solution. Au lieu d'essayer d'obtenir un pointeur sur le dossier, et si cela échoue, créez le dossier, essayez de créer d'abord le dossier, ignorez l'erreur si le dossier est déjà présent, puis obtenez le pointeur, que le dossier soit présenté. existait ou a été récemment créé.

Dim containerFolder As folder
Dim newSubFolder As folder

' containerFolder needs to point to a valid folder (code not shown)
Dim nameStr As String
nameStr = "03"

On Error Resume Next
Set newSubFolder = containerFolder.folders.Add(nameStr)
On Error GoTo 0
Set newSubFolder = containerFolder.folders.Item(nameStr)


0 commentaires