2016-12-15 1 views
1

Je rencontre un problème avec la manière dont une zone de liste se comporte sur un formulaire Excel. Procédure pour reproduire le problème:Problème de zone de liste Excel lors de l'utilisation de la propriété verrouillée

  • Créer un formulaire utilisateur avec un contrôle ListBox
  • Utilisez le code ci-dessous avec ce formulaire utilisateur:

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Me.ListBox1.Locked = True 
        Me.ListBox1.Locked = False 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    

Quand la forme est d'abord montré, je suis capable de naviguer dans la zone de liste normalement, en utilisant les touches fléchées et les touches de page. Cependant, après le déclenchement de l'événement de double-clic, toute la navigation au clavier n'a aucun effet, y compris la tabulation vers d'autres contrôles (s'ils se trouvent sur le formulaire). Cliquer sur la liste déroulante semble fonctionner, et le contour du focus est affiché correctement, mais il y a quelque chose qui cloche dans la façon dont le focus est géré après que la listbox soit verrouillée puis déverrouillée. Que se passe-t-il?

Utilisation de l'édition 32 bits d'Office 2013.

+0

pas que ce soit particulièrement utile, mais j'utilise également Office 2013 édition 32 bits et cela fonctionne correctement pour moi dans Excel. – OpiesDad

+0

Vous voulez dire que vous étiez en mesure de sélectionner des éléments dans la zone de liste via le clavier après un double-clic? – Cpu1

+0

@ A.S.H. Où est passée ta réponse? Après avoir essayé votre code, j'ai remarqué que rendre la listbox invisible déplace le focus au contrôle suivant. S'il n'y a aucun contrôle avec la tabulation disponible, le focus "se bloque" à nouveau, rendant la méthode '.SetFocus' de la listbox obligatoire. Ainsi, il semble que la manière la plus fiable d'éviter ce "raccrochage" du clavier est de déplacer le focus sur un autre contrôle, puis de le remettre dans la liste. – Cpu1

Répondre

0

J'ai réussi à reproduire ce problème, et la mise au point ailleurs avant le verrouillage et le déverrouillage de la zone de liste a fonctionné pour moi:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    Me.TextBox1.SetFocus 'or some other control. 
    Me.ListBox1.Locked = True 
    Me.ListBox1.Locked = False 
    Me.ListBox1.SetFocus 
End Sub 
0

2 solutions testées qui vous permettent d'utiliser les touches fléchées pour naviguer.

  1. Étant donné qu'il n'y a pas un seul gestionnaire d'événements de clic, essayez appeler le seul clic l'événement après la DblClick (fonctionne tout le temps):

    Private Sub ListBox1_Click() 
        Debug.Print "ListBox1_Click()" 
    End Sub 
    
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Debug.Print "ListBox1_DblClick()" 
        With Me.ListBox1 
         .Locked = True 
         .Locked = False 
        End With 
        ListBox1_Click 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    
  2. Réglage de la Cancel = False à la fin de DblClick. (Ne fonctionne pas toujours!)

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
        Debug.Print "ListBox1_DblClick()" 
        With Me.ListBox1 
         .Locked = True 
         .Locked = False 
        End With 
        Cancel = False 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim i As Integer 
        For i = 1 To 10 
         Me.ListBox1.AddItem i 
        Next i 
    End Sub 
    
+0

Désolé, aucune solution de contournement n'a fonctionné pour moi. Le formulaire ne répond pas à la navigation au clavier. – Cpu1