Felder in "Wildcards" (Text) umwandeln (VBA, Word)

  • Word

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von paolo.

    Felder in "Wildcards" (Text) umwandeln (VBA, Word)

    Hallo Welt

    Ich habe einige Probleme beim Erstellen eines Makros in VBA für Word (2010).

    Ich habe es bisher
    geschafft (mit Hilfe der Suchfunktion dieses Forums), durch alle Sections und Ranges zu loopen , die gefundenen Felder zu löschen und stattdessen Text einzufügen.
    Im Moment schut mein Code folgendermassen :


    Visual Basic-Quellcode

    1. Option Explicit
    2. Public Sub FieldsToWildcards()
    3. Dim aField As field
    4. Dim pRange As Word.Range
    5. Dim pattern As String
    6. For Each pRange In ActiveDocument.StoryRanges
    7. For Each aField In pRange.Fields
    8. Set pRange = aField.Code
    9. aField.Delete
    10. pRange.Collapse (wdCollapseStart)
    11. pRange.Text = "${A[;B]}"
    12. Next
    13. Next
    14. End Sub


    Was das Makro jetzt können soll ist follgendes:

    { IF «Sex» = "f" "She" "He" } , (das ist übrigens ein Feld.) In dieses
    ${She,He} (text)

    zu umwandeln und follgendes:

    { MERGEFIELD Name } (Feld) in dieses ${Name} (text)

    zu umwandeln.

    Ich schätze jegliche Hilfe.



    P.S.: Bitte entschuldigt mein Deutsch!

    Danke,
    Herzliche Grüße!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „paolo“ () aus folgendem Grund: VB Tags vergessen

    Hier ist die Möglichkeit, die ich zusammengebastelt habe:



    Option Explicit


    Public Sub FieldsToWildcards()
    '
    ' FieldsToWildcards Macro
    ' Convertes Fields to Wildcards (strings)
    ' @author Iosif Miclaus
    '
    Dim pRange As Word.Range
    Dim aField As field
    Dim currFieldCode As String
    Dim wildcard As String
    Dim skipNext As Boolean
    skipNext = False


    Dim mfIfParamsCount1 As Integer
    mfIfParamsCount1 = 6
    Dim mfIfParamsCount2 As Integer
    mfIfParamsCount2 = 7


    Dim mfIfParams1 As Variant
    Dim param1Pos As Integer
    param1Pos = 4


    Dim mfIfParams2 As Variant
    Dim param2Pos As Integer
    param2Pos = 1
    Dim param3Pos As Integer
    param3Pos = 3
    Dim param4Pos As Integer
    param4Pos = 5


    Dim mfTypePos As Integer
    mfTypePos = 2
    Dim mfVarStart As Integer
    mfVarStart = 13


    Dim dqASCIICode As Integer
    dqASCIICode = 34




    'Loop through all ranges (also header and footer)
    For Each pRange In ActiveDocument.StoryRanges

    'Loop through all fields in current range
    For Each aField In pRange.Fields
    Set pRange = aField.Code
    currFieldCode = aField.Code
    wildcard = "${"

    'IF-MERGEFIELD
    If InStr(1, currFieldCode, "IF") = mfTypePos Then
    'The next mergefield inside the if-mergefield can be skipped
    skipNext = True

    'Get parameters for wildcard (second part)
    mfIfParams2 = Split(currFieldCode, Chr(dqASCIICode), mfIfParamsCount2)

    'Get parameter(s) for wildcard (first part)
    mfIfParams1 = Split(mfIfParams2(0), " ", mfIfParamsCount1)

    'Add first parameter to wildcard
    wildcard = wildcard & Trim(mfIfParams1(param1Pos)) & ";"
    'Add second parameter to wildcard
    wildcard = wildcard & Trim(mfIfParams2(param2Pos)) & ";"
    'Add third parameter to wildcard
    wildcard = wildcard & Trim(mfIfParams2(param3Pos)) & ";"
    'Add fourth parameter to wildcard
    wildcard = wildcard & Trim(mfIfParams2(param4Pos)) & "}"

    'MsgBox wildcard
    Else
    If InStr(1, currFieldCode, "MERGEFIELD") = mfTypePos Then
    'MERGEFIELD inside IF-MERGEFIELD
    If skipNext = True Then
    skipNext = False
    '(normal) MERGEFIELD
    Else
    skipNext = False
    wildcard = wildcard & Trim(Mid(currFieldCode, mfVarStart, Len(currFieldCode) - mfVarStart)) & "}"

    'MsgBox wildcard
    End If
    End If
    End If

    'Delete field
    aField.Delete

    'Add wildcard insead
    pRange.Collapse wdCollapseStart
    pRange.Text = wildcard
    Next
    Next


    End Sub


    Freundliche Grüße ;)