Enregistrer correctement la reference dans la memory au lieu d'activer

Comment save correctement la reference à une certaine cellule, comme

Dim x As WHAT_TYPE_? x = location_of_cell_in_memory 

au lieu de l'activer?

Je ne veux pas itérer en activant les cellules ( .Activate ou .Activate ) et puis en utilisant le décalage pour monter vers le haut ou vers le bas. Cela devrait être fait sans que rien ne se produise sur l'écran, simplement en récupérant et en assignant des valeurs en arrière-plan, de sorte que l'user ne peut pas cliquer sur quelque part sur l'écran et ruiner le script.

Ou

Est-ce que je dois vraiment définir un type de type Pair-D (x, y) moi-même et utiliser cela comme représentation cellulaire?

Ou

comme un sortingple (feuille, x, y)?

Je ne suis même pas sûr si cela est même possible dans VBA, je viens de Java.

Vous ne devez pas activer ou sélectionner une cellule pour atsortingbuer une valeur. La propriété value peut être lue ou écrite directement, count tenu de l'object approprié ( Range ou Cell , etc.). Vous pouvez initialiser une variable Range et laisser l'adresse de la cellule à laquelle vous souhaitez accéder ultérieurement.

Comme indiqué ci-dessus, si vous souhaitez simplement atsortingbuer des valeurs sur une itération de cellules, il n'est pas nécessaire d'atsortingbuer réellement une reference de gamme dynamic et d'utiliser un décalage. Une boucle simple ferait. Voir le code et l'exemple suivants.

 Sub IterateExample() 'Initialize variables. Dim wb As Workbook Dim ws As Worksheet Dim x As Integer, y As Integer, i As Integer, j As Integer ' Assign to object. Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") ' Assign values. x = 10 y = 10 Application.ScreenUpdating = False 'Hide updates from viewer/user. ' Simple iteration. For i = 1 To x For j = 1 To y 'i is row index, j is column index. ws.Cells(i, j).Value = i * j 'Use .Value directly, no need to .Select or .Activate Next Next Application.ScreenUpdating = True 'Return to original setting. End Sub 

Le résultat est assez simple:

entrez la description de l'image ici

Cependant, si vous devez vraiment avoir une reference de gamme qui se met à jour, une boucle peut également résoudre cela, re-assignez l'object à l'intérieur de la boucle.

 Sub OffsetExample() 'Initialize variables. Dim wb As Workbook Dim ws As Worksheet Dim r As Range, i As Integer 'Assign to object. Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") 'Assign range. Set r = ws.Range("A1") Application.ScreenUpdating = False 'Hide updates from viewer/user. 'Iteration of offset. For i = 1 To 10 r.Value = i * i Set r = r.Offset(1, 1) 'Move range reference 1 row down, 1 column right Next Application.ScreenUpdating = True 'Return to original setting. End Sub 

Le résultat est le suivant:

entrez la description de l'image ici