2009-04-03 7 views
1

以前この質問をしましたが、十分明確ではなかったと思います。実行時にvbaという単語で新しい選択オブジェクトを作成します

マクロを実行した後にハイライトしてテキストを選択し、新しい選択を処理するようにユーザーに指示するWord VBAマクロを作成する必要があります。このプロセスは、マクロ内で不明な回数だけ繰り返されます。

私が持っている唯一の問題は、VBAマクロを「一時停止」にしてユーザーにこの選択をさせる方法を考え出すことです。 AutoCAD VBAに精通している人なら、私はAcadSelectionSet.SelectOnScreenメソッドと同等のものを探しています。これは非常に明白で根本的なようですが、Microsoftのヘルプファイルやオンラインでの検索では、これを行う方法がわかりません。できれば助けてください!

答えて

1

ApplicationオブジェクトのWindowSelectionChangeイベントがありますか?特別ThisDocumentモジュールで

、あなたはこのようなコードが必要です。

Public WithEvents app As Application 

Private Sub app_WindowSelectionChange(ByVal Sel As Selection) 

MsgBox "The selection has changed" 

End Sub 

明らかに便利なコードでMsgBoxを交換し、選択にアクセスするためにSelパラメータを使用します。あなたはそれを設定するにはThisDocumentモジュール

の上部にあるドロップダウンを使用して他のイベントを試してみたい場合は、通常のコードモジュールで、このようなマクロを必要とする:setUpApp

Sub setUpApp() 

Set ThisDocument.app = ThisDocument.Application 

End Sub 

が実行されました一度、app_WindowSelectionChangeイベントは、選択が

0

を変更するたびに、特定の条件が満たされるまであなたのマクロキープが実行してみましょうするモードレスフォームを使用することができますトリガされます。

フォームデザイナー:

  • フォームを追加します。
  • ボタンを1つ追加します。
  • ラベルを1つ追加します。

フォームコード:

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 
関連する問題