2008-09-02 14 views
2

Ich schrieb ein Visual Basic-Makro zum Archivieren von Anlagen für Outlook 2007, fand aber keine völlig zufriedenstellende Möglichkeit zum Anzeigen einer Verzeichnisauswahl aus dem Outlook-Makro. Jetzt weiß ich nicht viel über Windows-APIs oder VB (A) -Programmierung, aber der "Standard" Windows-Dateidialog, den ich am häufigsten in Microsoft-Anwendungen sehe, scheint eine offensichtliche Wahl zu sein, aber es scheint nicht leicht verfügbar zu sein aus Outlook-Makros.Verzeichnis-Picker für Visual Basic-Makro in MS Outlook 2007

Idealerweise sollte die Verzeichnisauswahl zumindest erlauben, manuell einen Dateipfad/URI als Startpunkt für die Navigation einzufügen, da ich manchmal bereits ein Explorer-Fenster für das gleiche Verzeichnis geöffnet habe.

Was sind die besten Optionen für Verzeichnisauswahl in Outlook-Makros?

Zwei Dinge, die ich schon ausprobiert und finden nicht völlig zufrieden stellend sind (der Code vereinfacht und w/o Handhabung Fehler und wahrscheinlich läuft auch in älteren Outlook-Versionen):

1) Mit Shell.Application die es nicht erlaubt ich tatsächlich einen Startpunkt über die Zwischenablage einfügen oder andere Operationen ausführen, wie das Umbenennen von Ordnern:

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) mit der Office.FileDialog von Microsoft Word 12.0 Object Library (über Werkzeuge/Referenzen) und dann Word-Datei-Dialog, die irgendwie immer annehmen mein Vista System zu erscheinen und bringen Word nicht immer wirklich in den Vordergrund. Stattdessen ist Outlook manchmal blockiert und der Dateidialog bleibt irgendwo im Hintergrund hängen:

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) 

Irgendwelche anderen Ideen?

Antwort

2

Ihre beste Wette wird wahrscheinlich sein, die Windows32-API dafür zu verwenden. Beispiele für VBA-Code zur Interaktion mit der API finden Sie unter this MSDN article.

Der Artikel beschreibt ein paar verschiedene Techniken, aber ich würde empfehlen, den Artikel nach "COMDLG32.dll" zu suchen und die in diesem Abschnitt beschriebenen Schritte auszuführen.