1

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

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

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

4

2 回答 2

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选择更改,就会触发该事件

于 2009-04-05T00:49:15.823 回答
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
于 2009-04-30T12:18:12.810 回答