2009-04-03 5 views
1

Ich habe diese Frage vorher, aber ich glaube nicht, dass ich klar genug war.ein neues Auswahlobjekts zur Laufzeit in Wort vba

Ich brauche einen Word-VBA-Makro zu schreiben, die den Benutzer auffordern, werden einen Text auswählen, indem Sie ihn markiert, nachdem das Makro gestartet wird ausgeführt und dann die neue Auswahl zu verarbeiten. Dieser Prozess wird innerhalb des Makros eine unbekannte Anzahl von Malen wiederholt.

Das einzige Problem, das ich habe ist, herauszufinden, wie die VBA-Makro ‚Pause‘ zu erhalten und dem Benutzer zu ermöglichen, diese Auswahl zu treffen. Wenn jemand mit AutoCAD VBA vertraut ist, suche ich nach dem Äquivalent der AcadSelectionSet.SelectOnScreen Methode. Dies scheint so offensichtlich und grundlegend, aber ich kann nichts in den Microsoft-Hilfedateien finden oder Online-Suche, die mir zeigt, wie dies zu tun ist. Bitte helfen Sie, wenn Sie können!

Antwort

1

Sollten Sie vielleicht das WindowSelectionChange Ereignis des Application Objekts betrachten?

Im speziellen ThisDocument Modul, müssen Sie Code wie folgt:

Public WithEvents app As Application 

Private Sub app_WindowSelectionChange(ByVal Sel As Selection) 

MsgBox "The selection has changed" 

End Sub 

Offensichtlich die MsgBox mit nützlichem Code ersetzen und verwenden Sie die Sel Parameter, um die Auswahl zu gelangen. Wenn Sie andere Ereignisse versuchen wollen, dann die Dropdown-Menüs am oberen Rande des ThisDocument Modul verwenden

es einzurichten, müssen Sie einen Makro wie dies in einer normalen Code-Modul:

Sub setUpApp() 

Set ThisDocument.app = ThisDocument.Application 

End Sub 

Nach setUpApp gelaufen einmal wird das app_WindowSelectionChange Ereignis ausgelöst, wenn sich die Auswahl ändert

0

Sie ein modales Formular verwenden könnte Ihr Makro weiterlaufen zu lassen, bis eine bestimmte Bedingung erfüllt wurde:

Formular-Designer:

  • Fügen Sie ein Formular hinzu.
  • Fügen Sie eine Schaltfläche hinzu.
  • Fügen Sie ein Label hinzu.

Formularcode:

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 

anderen Code-Modul:

Sub StopAndGo() 
    UserForm1.Show vbModeless 
End Sub