2017-07-27 2 views
1

J'ai un contrôle de cadre Microsoft Form 2.0 avec trois boutons d'option. Le nom du contrôle de trame est Side, trois légendes de bouton d'option sont X, O et Random avec respectivement les noms xOption, oOption et randomSide. Le code fonctionne bien, sauf au démarrage, si j'ouvre Excel et exécute le programme immédiatement, il me donnera un Error 91, notez que l'une des options (X, O, ou Random) est déjà sélectionnée. Afin de se débarrasser de cette erreur, j'ai besoin de sélectionner explicitement une autre option, puis l'erreur disparaît. Je ne sais pas pourquoi cela arrive. Voici le sous le contrôle FrameErreur 91 sur le contrôle Frame lors du démarrage

Public Sub Side_Click() 

sideLetter = Side.ActiveControl.Caption 
If StrComp(sideLetter, "Random") = 0 Then 
    Randomize 
    tempRand = Int((Rnd() * 2 + 1)) 
    If tempRand = 1 Then 
     sideLetter = "X" 
    Else 
     sideLetter = "O" 
    End If 
End If 
End Sub 

La ligne sideLetter = Side.ActiveControl.Caption est celui qui cause le problème. Je n'ai pas déclaré explicitement Side comme un contrôle de trame dans le cas où c'est une information utile parce que je pense que l'objet est déjà déclaré juste en faisant le contrôle de trame. Merci d'avance!

Répondre

1

Vous devez vérifier que Side.ActiveControl est en fait un objet, avant vous lire c'est Légende:

Public Sub Side_Click() 
If Not Side.ActiveControl Is Nothing Then 
    sideLetter = Side.ActiveControl.Caption 
    If StrComp(sideLetter, "Random") = 0 Then 
     Randomize 
     tempRand = Int((Rnd() * 2 + 1)) 
     If tempRand = 1 Then 
      sideLetter = "X" 
     Else 
      sideLetter = "O" 
     End If 
    End If 
End If 
End Sub 
+0

est-il de toute façon de déclarer un contrôle de trame spécifique comme un objet? Par exemple, déclarer la variable X comme un objectif de contrôle de trame latérale? –

+0

'Dim myFrame As MSForms.Frame' – ThunderFrame