Best Practices > Diskussionen zu Best Practices

COM-Schnittstelle MS Word

<< < (2/3) > >>

ata:
@Remo,


--- Zitat ---Sonst folgendes:
-Mit Select und Selection arbeiten ist oft nicht so toll (sinnlose rumhüpferei, mit Range arbeiten ist besser)
-Textmarken in Kopf-/Fusszeile ausfüllen ist auch so Sache für sich (Stichwort: StoryRanges)
-Formfields ausfüllen kann auch gemein werden (mehr als bestimmte Anzahl Zeichen und CRLF), gibt aber Trick.
--- Ende Zitat ---

... das kann ich so bestätigen - ähnliches gilt ja auch bei EXCEL...

Deine Hilfe ist jederzeit willkommen - dein Trick würde mich interessieren...  ;)

Toni

Axel:

--- Zitat von: Fedaykin am 30.01.08 - 23:31:55 ---Also meldet euch wenn an meiner Hilfe interessiert.

--- Ende Zitat ---

Aber selbstverständlich sind wir interessiert. Für Verbesserungsvorschläge und Hinweise auf Stolperfallen sind wir immer dankbar.

Hier ist jede Hilfe willkomen.

Vielen Dank im Voraus an alle die helfen.



--- Zitat von: Fedaykin am 30.01.08 - 23:31:55 ---
Sonst folgendes:
...
-Textmarken in Kopf-/Fusszeile ausfüllen ist auch so Sache für sich (Stichwort: StoryRanges)
-Formfields ausfüllen kann auch gemein werden (mehr als bestimmte Anzahl Zeichen und CRLF), gibt aber Trick.

--- Ende Zitat ---

Textmarken in Kopf-/Fusszeilen kann man doch garnicht nutzen. Mir ist es wenigsten bisher nicht gelungen.
An dem Trick für die FormFields wäre ich auch interessiert. Obwohl ich, bedingt bei Problemen beim Ausdruck, immer weniger Formularfelder in Word verwende.


Axel

Fedaykin:
Hi zusammen

Habe erst mal folgendes zum anschauen.

'Einfügen eines Textes an einer Textmarke
Sub InsertAtTM(strMarke As String, strText As String)
'   Dim objWord As Application
'   Set objWord = Application
   Dim bmrange As Variant
   With objWord.ActiveDocument
       Set bmrange = .Bookmarks(strMarke).Range
       bmrange.Text = strText
       .Bookmarks.Add strMarke, bmrange
   End With
End Sub

Sub InsertAutoTextAtBM(strMarke As String, strTextbaustein As String)
'   Dim objWord As Application
'   Set objWord = Application
    Dim bmrange As Variant
    With objWord.ActiveDocument
        Set bmrange = .Bookmarks(strMarke).Range
        Set bmrange = .AttachedTemplate.AutoTextEntries(CStr(strTextbaustein)).Insert(bmrange)
        .Bookmarks.Add strMarke, bmrange
    End With
End Sub
'Einfügen eines Textbausteins in Fußzeile
Sub InsertAutoTextInFooter(strText As String)
'    Dim objWord As Application
'    Set objWord = Application
   
    Dim FooterRange As Variant
   
    With objWord.ActiveDocument
        Set FooterRange = objWord.Selection.Sections(1).Footers(wdHeaderFooterPrimary).Range
        .AttachedTemplate.AutoTextEntries(CStr(strText)).Insert FooterRange
       
        If .PageSetup.DifferentFirstPageHeaderFooter = True Then
            Set FooterRange = objWord.Selection.Sections(1).Footers(wdHeaderFooterFirstPage).Range
            .AttachedTemplate.AutoTextEntries(CStr(strText)).Insert FooterRange
        End If
       
        If .PageSetup.OddAndEvenPagesHeaderFooter = True Then
            Set FooterRange = objWord.Selection.Sections(1).Footers(wdHeaderFooterEvenPages).Range
            .AttachedTemplate.AutoTextEntries(CStr(strText)).Insert FooterRange
        End If
    End With
End Sub

Schaut mal an und sagt was Ihr so dazu meint. Textmarken werden so nicht zerstört und auch nicht so rumhüpferei. Das mit Fusszeile ist wohl noch nicht so toll. Die Frage ist halt was man so am ehesten braucht. Nur die Ansichten wechseln und dann einfügen ist auch nicht toll. (Erste Seite anders und Ungerade Seiten anders und welcher Abschnitt).

Gruss
Remo

Fedaykin:
Und da euch das wohl das mit Feldern am meisten interessiert hier diese Routine.

'Einfügen von Texten, die als Parameter übergeben werden, in Formularfelder.
Sub InsertInField(strFeld As String, strText As String)
'    Dim objWord As Application
'    Set objWord = Application
    Dim FormFeld As Variant
    Dim IsProtected As Boolean
    Dim Feld As Range
    With objWord.ActiveDocument
        On Error Resume Next
        Set FormFeld = .FormFields(CStr(strFeld))
        On Error GoTo 0
        If Not IsEmpty(FormFeld) Then
            Set Feld = FormFeld.Range
            IsProtected = (.ProtectionType = wdAllowOnlyFormFields)
            If IsProtected Then .Unprotect
            Feld.Fields(1).Result.Text = strText
            If IsProtected Then .Protect wdAllowOnlyFormFields, True
        End If
    End With
End Sub

PS: Wie ihr seht ist der Trick das Formularfeld als Feld zu betrachten. Dann klappen auch Zeilenumschaltungen und längerer Text. Leider muss dafür aber der Dokumentschutz aufgehoben werden.

Gruss
Remo

Fedaykin:
Hi zusammen

Wieder ich.  ;D

Eigentlich könnte man auch den Unterschied zwischen Textmarke (Bookmark) und Formularfeld (FormField) ganz aufheben. Bei dem Add-In das wir haben ist uns das auf jeden Fall ziemlich Wurst was das eigentlich ist was wir ausfüllen wollen. Schick würde es wenn man das ganze Zeug auch noch mit einer Laufnummer versieht, da muss man aber erst mal Bookmarks (sollten Formularfelder ja auch immer haben) sammeln gehen.

Gruss
Remo

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln