Mit VB 2012 in Word Textmarken füllen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von EliotM.

    Mit VB 2012 in Word Textmarken füllen

    Hallo,
    mein komplettes Projekt läuft bisher mit Option Strict ON.
    Mit meinem letzten Code fülle ich Textmarken in einer Word.dot, wobei ich für Bilder die Datenbank-ID und die Anzahl der Zeilen benötige.
    Ich starte in Word von VB aus ein Makro, das auf die beiden Zahlen zugreift. Diese stehe je in einer geschlossenen Textmarke, die beim normalen Füllen weg ist. Ich brauche sie aber für das Makro! Deshalb müssen beide mit dem Inhalt wieder da sein.
    So weit, so gut. Aber hier bringt mir Strict On den Fehler: "System Strict On disallows...
    Mit Strict Off läuft das Programm und macht, was es soll. Ich will aber Strict On wieder einschalten und habe schon alles gegoogelt, wurde aber nicht schlauer.

    In der Zeile 9 und 17 ist der Fehler bei TMRange von Range:=TMRange

    Hier mal der Code:

    Visual Basic-Quellcode

    1. If tsmDruckBild.Checked Then
    2. blnSichtbar = False
    3. RezMessenL() 'Anzahl Zeilen feststellen
    4. Dim TMRange As Word.Range
    5. If WordApp.ActiveDocument.Bookmarks.Exists("Tm_Zeilen") Then
    6. With WordApp.ActiveDocument
    7. TMRange = .Bookmarks.Item("Tm_Zeilen").Range
    8. TMRange.Text = txtZeilAnz.Text 'Anzahl Zeilen
    9. .Bookmarks.Add(Name:="Tm_Zeilen", Range:=TMRange)
    10. 'TMRange = Nothing
    11. End With
    12. End If
    13. If WordApp.ActiveDocument.Bookmarks.Exists("Tm_Bild") Then
    14. With WordApp.ActiveDocument
    15. TMRange = .Bookmarks.Item("Tm_Bild").Range
    16. TMRange.Text = txtID.Text 'DB-ID-Nr
    17. .Bookmarks.Add(Name:="Tm_Bild", Range:=TMRange)
    18. 'TMRange = Nothing
    19. End With
    20. End If
    21. WordDoc.Application.ActiveDocument.RunAutoMacro(Word.WdAutoMacros.wdAutoNew) 'Start Word-Makro: Bilder
    22. tsmDruckBild.Checked = False
    23. End If


    Grüße
    EliotM
    Mit Office.Interop musst du entweder Strict Off arbeiten oder viel typecasten.
    Da ist halt viel Late Binding dabei.
    TMRange = DirectCast(.Bookmarks.Item("Tm_Bild").Range,Word.Range)

    Du kannst ja den Word-Code in eine separate Strict-Off-Klasse auslagern, wenn der Aufwand fürs Casten zu groß wird.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    danke für die Antwort, das ist also bekannt! Da alles andere mit Strict On läuft, hatte ich schon vor, das Programm mit Off laufen zu lassen. Ich glaube, viel kann nicht schief gehen...?
    Deine Zeile hat leider auch nichts anderes gebracht, ich habe einfach meine Zeile ersetzt. Oder muss ich was anderes machen?
    Viel Aufwand wäre es ja nicht, da es nur diese beiden Passagen sind.
    Das mit Auslagern muss ich mir mal anschauen, habe ich noch nie gemacht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EliotM“ ()

    Normalerweise ist die Fehlermeldung sprechend genug, um die richtige Maßnahme zu finden.

    EliotM schrieb:

    das Programm mit Off laufen zu lassen
    Du kannst das ganze Projekt auf Option Strict On lassen und nur in der Klasse oder dem Modul Option Strict Off in die erste Zeile schreiben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --