簡體   English   中英

如何使用VBA宏在Microsoft Word中將剪貼板分成多個字符串?

[英]How to break clipboard into multiple strings in Microsoft Word Using a VBA Macro?

我試圖通過將剪貼板中的文本分成各種字符串來替換單個word文檔中的多個“占位符”。

樣本剪貼板文本如下所示:

Placeholder1=
Test1

Placeholder2=
First sentence.

Second Sentence.

Third Sentence.

Placeholder3=
2044 to 2045

Placeholder4=
five

到目前為止,我可以將文本粘貼到剪貼板中以替換單個占位符。 我也可以插入日期。

這是我到目前為止的內容:

    Sub FillPlaceHolder()

        'Prints a new label in bottom left of sticker sheet based on clipboard data
        'To use the clipboard you need a reference to the following library
        'Go to Tools > References and select Microsoft Forms Object Library
        'If it's not visible, click browse and find FM20.dll in your system32 folder
        Dim DataObj As MSForms.DataObject
        Set DataObj = New MSForms.DataObject

        'Set error handling, will skip the code if the clipboard is empty
        On Error GoTo Error

        'Set variable for clipboard string
        Dim myString As String
         Dim myDate As Date

        'Get data object from clipboard
        DataObj.GetFromClipboard


        'Set mystring to the first text in the clipboard
        myString = DataObj.GetText(1)
        myString = ClearFormatting




        'Open the Word document
        Documents.Open FileName:=GetFolder() & "Auden_perm_template.doc"

        'Replaces the PlaceHolder text
        With Selection.Find
            .Text = "PLACEHOLDER2"
            .Replacement.ClearFormatting
            .Replacement.Text = myString
            .Execute
        End With
        Selection.Paste

    TodaysDate2
    InsertDate
    TodaysDate
    InsertDate

    '


        'BELOW TO ADD PRINT
     '      Application.OnTime When:=Now + TimeValue("00:00:10"), Name:="Print_Label"


    'Process this error for empty clipboards
    Error:
       If Err <> 0 Then MsgBox "Data on clipboard is empty"


    End Sub




Sub TodaysDate2()
'
' Macro3Date Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "TODAYSDATE2"
        .Replacement.Text = "02/25/19"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.Find.Execute
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "TODAYSDATE2"
        .Replacement.Text = "02/25/19"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

End Sub
Sub InsertDate()
'
' Macro3 Macro
'
'
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
End Sub

Sub TodaysDate()
'
' Macro3Date Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "TODAYSDATE"
        .Replacement.Text = "02/25/19"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.Find.Execute
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "TODAYSDATE2"
        .Replacement.Text = "02/25/19"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

End Sub

我正在努力弄清楚如何將剪貼板分成多個字符串。 您有什么推薦的嗎?

您可以使用Split將字符串拆分為數組

例如:

myString = split(DataObj.GetText(1),vblf)

myStringDimString更改為Variant

然后,您可以使用以下內容遍歷數組:

For X = lbound(myString) to ubound(myString)
    If myString(X) = "PLACEHOLDER1" then
        'Do Something when placeholder1 found
    ElseIf myString(X) = "PLACEHOLDER2" then
        'Do Something when placeholder2 found
    ElseIf myString(X) = "PLACEHOLDER3" then
        'Do Something when placeholder3 found
    End IF
next

您將需要Dim X作為Long

您可以設置幾個變量來設置每個占位符的開始和結束,然后可以循環遍歷這些部分,將每個元素以vblf作為分界符重新連接在一起,以創建所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM