创建一个用户表单,将文本框输入打印到文档中的特定位置

时间:2016-02-25 18:27:07

标签: performance vba loops userform undo-redo

我正在使用VBA字系统。该系统的目标是用文本框中的输入替换文档中的几个不同的单词。到目前为止,我有一个带有12个不同文本框的用户表单,每个文本框包含来自用户的输入以替换文档中的单词。我在userform中创建了一个按钮,用于将文本框中的所有输入打印到文档中。 对于每个文本框,我制作了以下代码:

Sub FindAndReplaceAllStoriesHopefully()

Dim myStoryRange As Range

'
'
'Loop replaces everything with <KLANTNAAM> in the document
For Each myStoryRange In ActiveDocument.StoryRanges
    With myStoryRange.Find
    .Text = "<KLANTNAAM>"
    .Replacement.Text = TextBox1.Value
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
End With
Do While Not (myStoryRange.NextStoryRange Is Nothing)
    Set myStoryRange = myStoryRange.NextStoryRange
    With myStoryRange.Find
        .Text = "<KLANTNAAM>"
        .Replacement.Text = TextBox1.Value
        .Wrap = wdFindContinue
        .Execute Replace:=wdReplaceAll
    End With
Loop
Next myStoryRange         

到目前为止,我为所有12个文本框执行了此操作并且它可以正常工作,但它并不顺畅。该 单击按钮后,使用

调用该功能
Call FindAndReplaceAllStoriesHopefully

我遇到了一些我无法解决的问题:

  • 点击按钮并且某些文本框未被用户填写后,标记的字词<KLANTNAAM>仍会被替换并从文档中删除。

  • 由于相同的代码被复制12次,因此宏的性能不佳。

  • 单击按钮后,用户无法轻松撤消用户窗体中输入的错误,因为结果已打印完毕。

我希望得到一些提示,以便最终确定此申请。

1 个答案:

答案 0 :(得分:0)

这样的事情:

Private Sub CommandButton1_Click()
    Dim numBlank As Long, n As Long, txt As String
    Dim bookMarkName As String

    numBlank = Me.CountBlanks
    If numBlank > 0 Then
        If MsgBox(numBlank & " entries are blank!. Continue?", _
                         vbExclamation + vbOKCancel) <> vbOK Then
            Exit Sub
        End If
    End If

    For n = 1 To 4
        txt = Me.Controls("Textbox" & n).Text
        bookMarkName = "BOOKMARK" & n
        FindAndReplaceAllStoriesHopefully bookMarkName, txt
    Next n

End Sub

Function CountBlanks() As Long
    Dim n As Long, b As Long
    b = 0
    For n = 1 To 4
        If Len(Me.Controls("Textbox" & n).Text) = 0 Then
            b = b + 1
        End If
    Next n
    CountBlanks = n
End Function