2009-04-03 4 views
1

J'ai déjà posé cette question mais je ne pense pas avoir été assez clair.Créer un nouvel objet de sélection à l'exécution dans le mot vba

J'ai besoin d'écrire une macro Word VBA qui va inviter l'utilisateur à sélectionner du texte en le mettant en surbrillance après le démarrage de la macro, puis à traiter la nouvelle sélection. Ce processus répètera un nombre inconnu de fois dans la macro.

Le seul problème que je rencontre est de trouver comment mettre la macro VBA en pause et permettre à l'utilisateur de faire cette sélection. Si quelqu'un connaît AutoCAD VBA, je cherche l'équivalent de la méthode AcadSelectionSet.SelectOnScreen. Cela semble si évident et fondamental, mais je ne trouve rien dans les fichiers d'aide de Microsoft ou de recherche en ligne qui me montre comment faire cela. S'il vous plait aidez si vous le pouvez!

Répondre

1

Si vous examinez peut-être l'événement WindowSelectionChange de l'objet Application?

Dans le module ThisDocument spécial, vous avez besoin d'un code comme ceci:

Public WithEvents app As Application 

Private Sub app_WindowSelectionChange(ByVal Sel As Selection) 

MsgBox "The selection has changed" 

End Sub 

Évidemment, le MsgBox remplacer avec le code utile et utiliser le paramètre Sel pour accéder à la sélection. Si vous voulez essayer d'autres événements puis utilisez les menus déroulants en haut du module ThisDocument

Pour le configurer, vous avez besoin d'une macro comme celui-ci dans un module de code normal:

Sub setUpApp() 

Set ThisDocument.app = ThisDocument.Application 

End Sub 

Après setUpApp a courir une fois, l'événement app_WindowSelectionChange sera déclenché à chaque fois que la sélection change

0

Vous pouvez utiliser un formulaire modales pour laisser votre macro garder en cours d'exécution jusqu'à ce qu'une certaine condition a été remplie:

Concepteur de formulaires:

  • Ajouter un formulaire.
  • Ajouter un bouton.
  • Ajouter une étiquette.

Code Forme:

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 

Un autre module de code:

Sub StopAndGo() 
    UserForm1.Show vbModeless 
End Sub 
Questions connexes