我之前曾问过这个问题,但我认为我不够清楚。
我需要编写一个Word VBA宏,它会在宏开始运行后通过突出显示来提示用户选择一些文本然后处理新选择。此过程将在宏中重复未知次数。
我遇到的唯一问题是弄清楚如何让VBA宏“暂停”并允许用户进行此选择。如果有人熟悉AutoCAD VBA,我正在寻找等效的AcadSelectionSet.SelectOnScreen
方法。这似乎是如此明显和根本,但我只是在Microsoft帮助文件中找不到任何内容或在线搜索,告诉我如何执行此操作。如果可以,请帮忙!
答案 0 :(得分:1)
您是否应该查看WindowSelectionChange
对象的Application
事件?
在特殊的ThisDocument
模块中,您需要这样的代码:
Public WithEvents app As Application
Private Sub app_WindowSelectionChange(ByVal Sel As Selection)
MsgBox "The selection has changed"
End Sub
显然用有用的代码替换MsgBox
并使用Sel
参数来访问选择。如果您想尝试其他事件,请使用ThisDocument
模块顶部的下拉列表
要进行设置,您需要在普通代码模块中使用这样的宏:
Sub setUpApp()
Set ThisDocument.app = ThisDocument.Application
End Sub
setUpApp
运行一次后,只要选择更改,就会触发app_WindowSelectionChange
事件
答案 1 :(得分:0)
您可以使用无模式窗体让宏继续运行,直到满足某个条件:
表单设计师:
表单代码:
Option Explicit
Dim m_stopHere As Boolean
Dim m_timesDone As Long
Private Sub CommandButton1_Click()
m_timesDone = m_timesDone + 1
m_stopHere = Not DoStuff(m_timesDone)
Me.Caption = "DoStuff was called " & m_timesDone & " time(s)."
If m_stopHere Then
MsgBox "Processing finished, closing form..."
Unload Me
End If
End Sub
Private Function DoStuff(times As Long) As Boolean
Dim myCondition As Boolean
If times < 5 Then
MsgBox "You selected: " & Selection.Text
Selection.Collapse wdCollapseEnd
myCondition = True
Else
Me.Label1.Caption = "No more selections, thanks!"
End If
DoStuff = myCondition
End Function
Private Sub UserForm_Initialize()
Me.Label1.Caption = "Please select some text in Word and press the button."
End Sub
另一个代码模块:
Sub StopAndGo()
UserForm1.Show vbModeless
End Sub