在运行时在word vba中创建一个新的选择对象

时间:2009-04-03 00:04:26

标签: vba ms-word selection

我之前曾问过这个问题,但我认为我不够清楚。

我需要编写一个Word VBA宏,它会在宏开始运行后通过突出显示来提示用户选择一些文本然后处理新选择。此过程将在宏中重复未知次数。

我遇到的唯一问题是弄清楚如何让VBA宏“暂停”并允许用户进行此选择。如果有人熟悉AutoCAD VBA,我正在寻找等效的AcadSelectionSet.SelectOnScreen方法。这似乎是如此明显和根本,但我只是在Microsoft帮助文件中找不到任何内容或在线搜索,告诉我如何执行此操作。如果可以,请帮忙!

2 个答案:

答案 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