我正在使用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次,因此宏的性能不佳。
单击按钮后,用户无法轻松撤消用户窗体中输入的错误,因为结果已打印完毕。
我希望得到一些提示,以便最终确定此申请。
答案 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