Как разбить буфер обмена на несколько строк в Microsoft Word с помощью макроса VBA? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь заменить несколько «заполнителей» в документе из одного слова, разбивая текст в моем буфере обмена на различные строки.

Пример текста буфера обмена будет выглядеть примерно так:

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

Я пытаюсь понять, как разбить буфер обмена на несколько строк.Что вы рекомендуете?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете разбить строку на массив, используя Split

Например:

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

Изменить Dim для myString с String на 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 в качестве разделителя, чтобы создать то, что вы хотите.

...