0
votes

VBA peuplant ComboBox avec texte alternatif

Nouveau à VBA Alors s'il vous plaît pardonnez ce qui peut sembler une question simple.

Utiliser MS Word, j'ai produit une forme simple. J'ai une combinaison qui est peuplée via un tableau. Cela fonctionne bien. Ce que j'essaie d'atteindre, c'est quand une option est sélectionnée dans cette combinaison de ComboBox, une autre entrée de texte est réellement placée dans le document dans un signet nommé conseils em>. P>

J'utilise des signets comme des placards dans le document Word. Au moment où la valeur déjà définie dans la combinaison est en cours dans le document, au lieu de l'alternative. P>

Voici mon code. P>

Private Sub CancelBut_Click()
UserForm.Hide
End Sub

Private Sub EnterBut_Click()
Dim number As Range
Set number = ActiveDocument.Bookmarks("number").Range
number.Text = Me.TextBox1.Value
Dim Name As Range
Set Name = ActiveDocument.Bookmarks("Name").Range
Name.Text = Me.TextBox2.Value
Dim Name1 As Range
Set Name1 = ActiveDocument.Bookmarks("Name1").Range
Name1.Text = Me.TextBox2.Value
Dim Address As Range
Set Address = ActiveDocument.Bookmarks("Address").Range
Address.Text = Me.TextBox3.Value
Dim ReportDate As Range
Set ReportDate = ActiveDocument.Bookmarks("ReportDate").Range
ReportDate.Text = Me.TextBox4.Value
Dim Location As Range
Set Location = ActiveDocument.Bookmarks("Location").Range
Location.Text = Me.TextBox5.Value
Dim Reason As Range
Set Reason = ActiveDocument.Bookmarks("Reason").Range
Reason.Text = Me.ComboBox1.Value
Dim Advice As Range
Set Advice = ActiveDocument.Bookmarks("Advice").Range
Advice.Text = Me.ComboBox2.Value
Dim Office As Range
Set Office = ActiveDocument.Bookmarks("Office").Range
Office.Text = Me.TextBox6.Value
Me.Repaint
UserForm.Hide
End Sub

Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
ComboBox2.Visible = True
Else
ComboBox2.Visible = False
End If
End Sub

Private Sub UserForm_Initialize()
Dim myArray() As String
  'Use Split function to return a zero based one dimensional array
  myArray = Split("problem1|problem2|problem3|problem4|" _
             & "problem5|problem6|problem7|problem8|problem9|" _
             & "problem10|problem11|problem12|problem13|problem14", "|")
  'Use List method to populate listbox
  ComboBox1.List = myArray
 
Dim myArray1() As String
  'Use Split function to return a zero based one dimensional array
  myArray1 = Split("advice for option one|advice for option two|" _
             & "advice for option three", "|")
  'Use List method to populate listbox
  ComboBox2.List = myArray1
  
  End Sub
  
  Private Sub ComboBox2_Change()
    Dim Advice As Range
    
    If ActiveDocument.Bookmarks.Exists("Advice") = True Then
        Set Advice = ActiveDocument.Bookmarks("Advice").Range
        
        Select Case ComboBox2.Value
            Case "advice for option one":
                Advice.Text = "This piece of text for option one."
            Case "advice for option two":
                Advice.Text = "This piece of text for option two."
            Case "advice for option three":
                Advice.Text = "This piece of text for option three."
        End Select
        ActiveDocument.Bookmarks.Add "Advice", Advice
    End If
End Sub


1 commentaires

Vous n'avez pas montré le contexte dans lequel le code est exécuté. Quel est le SUB, et comment est-ce appelé? Et vous n'avez pas quel type d'objet la variable de conseil est ou comment elle a été définie. C'est des informations pertinentes.


3 Réponses :


0
votes

Vous n'avez pas montré le contexte dans lequel le code est exécuté. Quel est le SUB, et comment est-ce appelé? Et vous n'avez pas quel type d'objet la variable de conseil est ou comment elle a été définie. Votre code semble définir les éléments combo et essayer d'agir sur une sélection combo dans le même sous-. Cela ne fonctionnera pas.

Vous devez créer une procédure d'événement dans le formulaire pour remplir le combo lorsque la boîte de dialogue est initialisée. P>

Private Sub ComboBox1_Change()
    Dim Advice As Range
    
    If ActiveDocument.Bookmarks.Exists("advice") = True Then
        Set Advice = ActiveDocument.Bookmarks("advice").Range
        
        Select Case ComboBox1.Value
            Case "advice for option one":
                Advice.Text = "This piece of text for option one."
            Case "advice for option two":
                Advice.Text = "This piece of text for option two."
            Case "advice for option three":
                Advice.Text = "This piece of text for option three."
        End Select
        ActiveDocument.Bookmarks.Add "advice", Advice
    End If
End Sub


3 commentaires

J'ai réalisé que je n'avais pas fourni suffisamment de code / d'informations. Le message original a été mis à jour car la réponse n'a pas fonctionné.


Vous avez ajouté plus de code mais n'a pas expliqué comment spécifiquement ça ne fonctionne pas. Avez-vous essayé de définir des points d'arrêt et de passer à travers? Si vous définissez un point d'arrêt à l'intérieur de ComboBox2_Change (), il devrait alors casser chaque fois que vous effectuez une sélection différente dans la liste déroulante.


Tout neuf à VBA, donc j'essaie toujours d'apprendre. Pour le moment, le problème est toujours le même en ce que le texte de la combinaison est toujours ajouté sur le signet du document Word. Il ne substitue toujours pas le texte "alternatif".



0
votes

Vous écrivez le texte sur le signet avec le code suivant qui est probablement exécuté lorsque le formulaire est fermé.

Private Sub EnterBut_Click()
    ...
    Set Advice = ActiveDocument.Bookmarks("Advice").Range
    Advice.Text = Me.ComboBox2.Value
    ...
End Sub


1 commentaires

Code échouant toujours comme indiqué entre les astérisques. Sous-ComboBox2_Change () Dim Conseils comme plage si ActiveDocument.bookmarks.exists ("conseils") = true, puis sélectionnez Case ComboBox2.Value Case "Conseil pour l'option One": "Ce morceau de Texte pour l'option une. " cas" Conseils pour option deux ": conseil.text =" Cette pièce de texte pour l'option deux. " CASE "Conseil pour option trois": conseil.text = "Ce texte pour l'option trois." Fin de sélectionner fin si fin



0
votes
Private Sub ComboBox2_Change()
Dim Advice As Range

If ActiveDocument.Bookmarks.Exists("Advice") = True Then
            
    Select Case ComboBox2.Value
        Case "advice for option one":
            ***Advice.Text = "This piece of text for option one."***
        Case "advice for option two":
            Advice.Text = "This piece of text for option two."
        Case "advice for option three":
            Advice.Text = "This piece of text for option three."
    End Select
    
End If
End Sub

7 commentaires

Droite, cela a du sens. J'avais réellement vu que j'avais déclaré deux fois la variable "Conseils". Supprimer de la partie supérieure du code où le reste est défini résolu le problème.


Tout comme un autre suivent - combien de "texte" pourrais-je ajouter sensiblement au code pour embellir le "conseil"? Ou est-il préférable d'être "importer" d'une manière ou d'une autre? Si ce dernier est là quelque part qui peut être souligné pour moi pour que je puisse le faire?


1) Quelle est la longueur maximale de l'énoncé? 2) Comment fonctionne-t-on à propos de stocker la valeur dans le document MS Word? J'espère que lorsqu'une option est sélectionnée via ComboBox, cela renseignera mon document avec quelque chose d'un couple de phrases pour dire une feuille A4.


Si vous le faites correctement, vous aurez créé un modèle (DOTM) pour votre document pour contenir le code, les styles, etc. Si tel est le cas, vous pouvez stocker les différents textes en tant que pièces rapides.


J'ai effectivement créé et ajouté le VBA et l'a enregistré dans un document (DOTM). Puis-je ou même comment puis-je initier une partie rapide sélectionnée dans le codage VBA que j'ai montré sur ce forum? I.e. Sélection d'une partie rapide via le ComboBox


N'EST PAS UN FORUM ET CETTE QUESTION EST ENTRAÎNEMENT DU SUPPÈLE DU SUPPORT. Je vous suggère d'essayer Google et Bing d'en savoir plus sur le sujet et enregistrer des macros pour vous donner la syntaxe. Sauf si les choses ont changé de pièces rapides / blocs de construction ne sont pas disponibles sur MacOS.


Entendu! Je vais avoir un peu de Google et voir ce que je peux trouver. Merci à tous pour leur contribution.