2017-09-15 1 views
0

J'ai créé un formulaire utilisateur qui a plusieurs textboxes et j'utilise le foundcell pour renvoyer les valeurs d'une ligne en fonction d'un numéro de référence. Ce que je veux faire est cependant rechercher une référence qui est basée dans le searchrange ci-dessous qui est dedans et si .Range("AK") est vide pour retourner. Sinon, un msgbox indique que le critère n'est pas valide.Fonction de recherche dans un formulaire utilisateur basé sur plusieurs critères

S'il vous plaît voir le code me tentais

Private Sub CommandButton1_Click() 

Dim searchRange As Range 
Dim foundCell As Range 
Dim mysearch As String 

mysearch = Ref.Value 

With Sheets("X") 
    Set searchRange = Sheets("X").Range("AB2", .Range("AB" & .Rows.Count).End(xlUp)) 
End With 

Set foundCell = searchRange.Find(what:=mysearch, Lookat:=xlWhole, MatchCase:=False, SearchFormat:=False) 

     If Not foundCell And foundCell.Offset(0, 9) Is Nothing Then 

      Me.C.Value = foundCell.Offset(0, -12).Value 
      Me.DD.Value = foundCell.Offset(0, -10).Value 
      Me.RD.Value = foundCell.Offset(0, -16).Value 
      Me.BN.Value = foundCell.Offset(0, -9).Value 
      Me.FN.Value = foundCell.Offset(0, -8).Value 
      Me.SHARP.Value = foundCell.Offset(0, -1).Value 
      Me.PGP.Value = foundCell.Offset(0, -7).Value 
      Me.ISS.Value = foundCell.Offset(0, -6).Value 
      Me.DE.Value = foundCell.Offset(0, -2).Value 
      Me.UN.Value = foundCell.Offset(0, -5).Value 
      Me.W.Value = foundCell.Offset(0, -4).Value 
      Me.IN.Value = foundCell.Offset(0, -3).Value 
      Me.CVAL.Value = foundCell.Offset(0, -20).Value 
      Me.ADD.Value = foundCell.Offset(0, -11).Value 
      Me.RESPONSE.Value = foundCell.Offset(0, 1).Value 
      Me.NRESPONSE.Value = foundCell.Offset(0, 2).Value 
      Me.MAREC.Value = foundCell.Offset(0, 4).Value 
      Me.MORET.Value = foundCell.Offset(0, 5).Value 
      Me.CNREC.Value = foundCell.Offset(0, 8).Value 
      Me.CNREF.Value = foundCell.Offset(0, 6).Value 
      Me.NVALUE.Value = foundCell.Offset(0, 7).Value 
      Me.CBY.Value = foundCell.Offset(0, 10).Value 
      Me.CDAT.Value = foundCell.Offset(0, 11).Value 

     Else 

      MsgBox "The Reference you have entered does not qualify and cannot be located. Please try another reference!" 
End If 

End Sub 

Répondre

-2

Si non foundCell est rien et foundCell.Offset (0, 9) <> "" "" Alors

+0

Cela soulèvera erreur d'exécution 91 chaque fois que 'foundCell est Nothing'. Les expressions conditionnelles ne court-circuitent pas dans VBA, elles sont complètement évaluées indépendamment de la première partie évaluant à False. De plus, '<>" "" "' signifie que vous vérifiez que la cellule ne contient pas * deux doubles guillemets, ce qui donne un coup d'oeil à "True" quand 'foundCell' n'est pas' ' Rien » –

0

Vous devez null vérifier foundCell sur son propre, l'opérateur logique And de VBA ne court-circuite pas comme l'opérateur AndAlso de VB.NET et l'opérateur && de C#.

If Not foundCell Is Nothing Then 

également foundCell.Offset(0,9) pourrait contenir une valeur d'erreur, qui fera toute opération de comparaison lancer un « Incohérence de type » erreur d'exécution. Utilisez IsError pour vérifier son état d'erreur avant vous assumez qu'il contient rien d'autre qu'une erreur:

If Not IsError(foundCell.Offset(0, 9).Value) Then 

Enfin, si votre intention est de vérifier si foundCell.Offset(0, 9) est pas vide, vous pouvez vérifier de plusieurs façons, mais Is Nothing n'est pas un d'entre eux:

  • IsBlank(foundCell.Offset(0, 9).Value) retournera True si la cellule ne contient rien - pas de valeur, pas de formule.
  • foundCell.Offset(0, 9).Value <> vbNullString retournera True si la valeur de la cellule est une chaîne vide, ou si sa formule évalue à une chaîne vide.
  • foundCell.Offset(0, 9).Value <> "" fera la même chose que <> vbNullString.

Ainsi:

If Not foundCell Is Nothing Then 
    If Not IsBlank(foundCell.Offset(0, 9).Value) Then 

Ou:

If Not foundCell Is Nothing Then 
    If Not IsError(foundCell.Offset(0, 9).Value) Then 
     If foundCell.Offset(0, 9).Value <> vbNullString Then