Comment dois-je stocker une plage de cellules dans une variable
Je suis actuellement en train de travailler sur un Sudoku programme comme un projet dans excel en utilisant VBA et j'ai besoin de stocker une Plage de cellules dans une variable.
Quelque chose le long des lignes de ce:
'''
dim grid as string
grid = range("b3:j11")
'''
Mais je ne suis pas sûr de ce dim grille.
J'ai essayé entier, chaîne et de la plage, mais la grille ne semble jamais avoir une valeur.
Je suis aussi en supposant que je ne suis pas de l'affectation de la plage de la variable correctement
/////////////////////////////////
À la suite des réponses im-coller le code ici.
Le duplicatecheck fonction de recherche dans une plage de cellules pour vérifier s'ils sont plus d'un d'un certain nombre, puis mettez en surbrillance les cellules en conséquence
Que je veux regarder à travers une autre plage de cellules pour les différents contrôles j'ai besoin de faire de la portée d'une variable de la fonction peut être réutilisé
toutefois, lorsque la variable de la grille est appelée dans le duplicatecheck fonction, il n'a pas de valeur et theirfor pas de cellules sont en cours de vérification
Dim row As Integer
Dim col As Integer
Dim grid As Variant
Dim checkmark As Integer
Sub Rowcheck()
checkmark = 1
row = 0
col = 0
grid = range("b3:j3").Value
For row = 0 To 8
duplicatecheck
Next row
End Sub
Function duplicatecheck()
Dim safe As Boolean
Dim check As Integer
Dim x As Integer
' check each number in a range for duplicates starting with 1
For check = 1 To 9
If Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check = 1 Then
' if number is only found once
safe = True
ElseIf Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check < 1 Then
' if the number is found less than once in the range
safe = False
ElseIf Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check > 1 Then
' if the number is found more than once
Selection.Offset(row, x).range(grid).Interior.colour = vbBlue ' highlight the range red
If checkmark = 1 Then
For x = 0 To 8
Selection.Offset(row, x).range(geid).Value = check
Selection.Offset(row, x).range.ont.colour = vbRed
Next x
ElseIf checkmark = 2 Then
For x = 0 To 8
Selection.Offset(x, col).range(grid).Value = check
Selection.Offset(x, col).range.ont.colour = vbRed
Next x
safe = False
error = True
If safe = False Then
complete = False
End If
Fin Si
Fin De Si
Prochain contrôle
Fin De Fonction
- J'ai essayé à la fois de ce code et de Rons, mais ils ne semblent être au travail. après l'exécution du code avec la grille définie comme la gamme ou de la variante après la grille ou filet = range("b3:j11") la variable de la grille ne marche pas encore avoir une valeur lorsqu'il est appelé plus tard
- Vérifier mon commentaire en Ron de réponse. Des variantes peuvent stocker des plages ou des valeurs. Si vous essayez de stocker des valeurs, utilisez la valeur de la plage, pas la plage elle-même.
Vous devez vous connecter pour publier un commentaire.
De le stocker dans une variante
vGrid sera alors un 2D 1-tableau de base, avec Dim 1 = lignes et Dim2 = colonnes
par exemple le contenu de B3 serait en vGrid(1,1)
Edit: Il semble que vous êtes maintenant à l'aide de la Grille comme un argument de type chaîne de l'objet de la Plage et à avoir des problèmes avec votre Nb.si.
Ensemble Option Explicit et la possibilité d'exiger la déclaration de la variable comme je l'ai mentionné dans un commentaire.
Pour autant que votre Nb.si déclaration, si la plage vous de vérifier que déclaré dans la Grille, et vos critères de Sélection.Offset(ligne,col), puis la ligne devrait ressembler à quelque chose comme:
Remarque que j'ai corrigé à l'aide de votre Fonction en tant que propriété de l'objet de Feuille de calcul; mettre la fourchette et les critères d'arguments, dans l'ordre, et retiré de la .vérifiez que vous aviez ajouté à la fin de cette fonction.
vGrid = Range("B3:J11").Value
à la place. Ce doit stocker la gamme de valeurs à la place de la plage elle-même. Il y a une énorme différence dans le stockage d'une gamme et stocker une gamme de valeur/s dans une variable.Variant
peut stocker de nombreux types de variables-plages, des feuilles, des entiers, des chaînes, des dates, etc. La seule chose qui colle est: si vous stockez une gamme à l'intérieur d'une variante, il est encore un éventail. Je sais que.Value
est sa propriété par défaut, mais cela ne signifie pas que vous devez les stocker en tant que tel. Dans des affaires avec des variantes, vous devez être très implicite avec vos devoirs, ou de drôles de comportement est lié à arriver. Notez que je ne suis pas opposés à votre réponse, btw. Il semble juste comme OP est confondue avec sa terminologie. 🙂