none
Wie kann ich bei einem VSTO Add-In einen Trigger setzen, sodass ein Befehl nur bei bestimmten Dokumenten ausgeführt wird? RRS feed

  • Frage

  • Hallo,

    ich brauche eine Benachrichtigung in Office die nur bei bestimmten Dokumenten greift.

    Durch recherchen und herumprobieren habe ich zumindest schon den Code um eine MessageBox anzeigen zu lassen, wenn ein Dokument gespeichert wird.

      Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, ByRef SaveAsUI As Boolean,
            ByRef Cancel As Boolean) Handles Application.DocumentBeforeSave
            MessageBox.Show("Dies ist ein Test.", "TEST")
        End Sub

    Jetzt stelle ich mir die Frage,wie kann ich den Befehl einschränken, sodass er nur bei Dateien von bestimmten Laufwerken oder besser noch bestimmten Ordnern/Dateien angezeigt wird?

    Freitag, 27. Oktober 2017 06:45

Antworten

  • Das Objekt "Me" ist dein AddIn und da hast du sowas halt nicht.
    In der Parameterübergabe gib es ein Objekt "Doc As Word.Document".
    Per F2 kannst du die Objektstruktur des Types "Document" ansehen.
    Die ".Path"-Eigenschaft ist der Pfad zum Dokument, die ".Name"-Eigenschaft ist der Name des Dokuments.

    Damit lässt sich doch was anfangen?

    CustomDocumentProperties gibt es auch als Eigenschaft, aber hier sind die Eigenschaften, die man selber, eben "Custom", verwalten kann.

    • Als Antwort markiert OS-Benji Montag, 30. Oktober 2017 09:36
    Freitag, 27. Oktober 2017 11:07
  • Dein Beitrag hat mir geholfen die Lösung zu finden.

    Leider konnte ich die Eigenschaft nicht auslesen, da Sie nicht wie ich dachte in Word hinterlegt wird. Deswegen bin ich jetzt den Weg gegangen den Filter an Dokumentenpfad zu legen.

    Private Sub ThisAddin_DocumentOpen() Handles Application.DocumentOpen
            Dim myPath = Application.ActiveDocument.FullName
    End sub
    Damit bekomme ich die Variabel myPath die den vollständigen Dokumentenpfad inklusive des Dateinamens des aktuellen Dokuments ausgibt wenn es geöffnet wird.

    • Als Antwort markiert OS-Benji Montag, 30. Oktober 2017 09:39
    Montag, 30. Oktober 2017 09:39

Alle Antworten

  • Das Objekt DOC enthält den Dateinamen in einer der vielen Eigenschaften (F2->Objektmodell).
    Dies musst du dann nur prüfen.

    Allerdings, wenn SaveASUI = True, wird der neue Name erst hinterher im Dialog eingegeben.

    Freitag, 27. Oktober 2017 07:52
  • Danke für die Info.

    Leider hilft mir das (als absoluter Laie) nicht weiter. Ich habe aber jetzt etwas anderes gefunden was das ganze vermutlich einfacher macht.

    Die Dokumente liegen auf einem Sharepoint und haben eine Property namens "Ausgabedatum". Könnte ich eine If-Abfrage erstellen die diesen Property ausliest (sofern dieser nicht leer ist) und diesen als vorschlag in eine InputBox packen die dem User angezeigt wird?

    Ich habe im MSDN ein Beispiel gefunden wie man die Dokumenteigenschaften auslesen kann (https://msdn.microsoft.com/de-de/library/dhxe2d75.aspx?f=255&MSPPError=-2147217396) aber Visual Studio beschwert sich über den Codeabschnitt: Me.CustomDocumentProperties das dieser kein Member von ThisAddIn ist.


    • Bearbeitet OS-Benji Freitag, 27. Oktober 2017 10:22
    Freitag, 27. Oktober 2017 10:21
  • Das Objekt "Me" ist dein AddIn und da hast du sowas halt nicht.
    In der Parameterübergabe gib es ein Objekt "Doc As Word.Document".
    Per F2 kannst du die Objektstruktur des Types "Document" ansehen.
    Die ".Path"-Eigenschaft ist der Pfad zum Dokument, die ".Name"-Eigenschaft ist der Name des Dokuments.

    Damit lässt sich doch was anfangen?

    CustomDocumentProperties gibt es auch als Eigenschaft, aber hier sind die Eigenschaften, die man selber, eben "Custom", verwalten kann.

    • Als Antwort markiert OS-Benji Montag, 30. Oktober 2017 09:36
    Freitag, 27. Oktober 2017 11:07
  • Dein Beitrag hat mir geholfen die Lösung zu finden.

    Leider konnte ich die Eigenschaft nicht auslesen, da Sie nicht wie ich dachte in Word hinterlegt wird. Deswegen bin ich jetzt den Weg gegangen den Filter an Dokumentenpfad zu legen.

    Private Sub ThisAddin_DocumentOpen() Handles Application.DocumentOpen
            Dim myPath = Application.ActiveDocument.FullName
    End sub
    Damit bekomme ich die Variabel myPath die den vollständigen Dokumentenpfad inklusive des Dateinamens des aktuellen Dokuments ausgibt wenn es geöffnet wird.

    • Als Antwort markiert OS-Benji Montag, 30. Oktober 2017 09:39
    Montag, 30. Oktober 2017 09:39