2008-09-02 11 views
2

J'ai écrit une macro Visual Basic pour l'archivage de pièces jointes pour Outlook 2007, mais je n'ai pas trouvé une méthode totalement satisfaisante pour afficher un sélecteur de répertoire à partir de la macro Outlook. Maintenant, je ne connais pas grand-chose des API Windows ni de la programmation VB (A), mais la boîte de dialogue Windows "standard" que je vois le plus souvent dans les applications Microsoft semble être un choix évident, mais elle ne semble pas être facilement disponible à partir des macros d'Outlook.Sélecteur de répertoire pour macro Visual Basic dans MS Outlook 2007

Idéalement, le sélecteur de répertoire devrait au moins permettre de coller manuellement un chemin de fichier/URI comme point de départ pour la navigation, car j'ai parfois déjà une fenêtre Explorer ouverte pour le même répertoire.

Quels sont les meilleurs choix pour les sélecteurs de répertoire dans les macros Outlook?

Deux choses je l'ai déjà essayé et ne trouvent pas tout à fait satisfaisantes (le code est simplifié et w/o la gestion des erreurs et fonctionne probablement aussi dans les anciennes versions d'Outlook):

1) À l'aide Shell.Application qui ne permet pas me coller en fait un point de départ via le presse-papier ou effectuer d'autres opérations comme des dossiers renommage:

Set objShell = CreateObject("Shell.Application") 
    sMsg = "Select a Folder" 
    cBits = 1 
    xRoot = 17 
    Set objBFF = objShell.BrowseForFolder(0, sMsg, cBits, xRoot) 
    path = objBFF.self.Path 

2) Utilisation du Office.FileDialog de Microsoft Word 12.0 Object Library (via des outils/références), puis en utilisant la boîte de dialogue de fichier Word, qui prend en quelque sorte toujours sur mon système Vista à apparaît et n'amène pas toujours Word au premier plan. Au lieu de cela, parfois Outlook est bloqué et la boîte de dialogue de fichier est laissé quelque part attardait en arrière-plan:

Dim objWord As Word.Application 
    Dim dlg As Office.FileDialog 
    Set objWord = GetObject(, "Word.Application") 
    If objWord Is Nothing Then 
    Set objWord = CreateObject("Word.Application") 
    End If 
    objWord.Activate 
    Set dlg = objWord.FileDialog(msoFileDialogFolderPicker) 
    path = dlg.SelectedItems(1) 

D'autres idées?

Répondre

2

Votre meilleur pari sera probablement d'utiliser l'API Windows32 pour cela. Voir this MSDN article pour un exemple de code VBA sur la façon d'interagir avec l'API.

L'article présente quelques techniques différentes, mais je suggérerais de rechercher l'article pour "COMDLG32.dll" et de suivre les étapes décrites dans cette section.