Правильно сохранить ссылку в памяти вместо активации

Как правильно сохранить ссылку на определенную ячейку, например

Dim x As WHAT_TYPE_? x = location_of_cell_in_memory 

вместо его активации?

Я не хочу итерации, активируя ячейки ( .Activate или .Activate ), а затем используя смещение для перемещения вверх или вниз. Это нужно делать без каких-либо действий на экране, просто извлекая и присваивая значения в фоновом режиме, чтобы пользователь не мог щелкнуть где-то на экране и разрушить скрипт.

Или

действительно ли мне нужно определить некоторый тип Pair-Datatype (x, y) и использовать это как представление ячеек?

Или

как тройка (лист, х, у)?

Я даже не уверен, что это возможно даже в VBA, я родом из Java.

Вам не нужно активировать или выбирать ячейку для назначения значения. Свойство value может быть прочитано или записано напрямую, с учетом соответствующего объекта ( Range или Cell и т. Д.). Вы можете инициализировать переменную Range и позволить этому адресу ячейки, к которому вы хотите получить доступ позже.

Вышеупомянутое, если вы просто хотите присвоить значения по итерации ячеек, нет необходимости действительно назначать ссылку на динамический диапазон и использовать смещение. Простой цикл. См. Следующий код и пример.

 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 

Результат достаточно прост:

введите описание изображения здесь

Однако, если вам действительно нужно иметь ссылку на диапазон, которая обновляется, цикл также может решить это, просто переустановите объект внутри цикла.

 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 

Результат выглядит следующим образом:

введите описание изображения здесь

Interesting Posts

Загрузите файл Excel и извлеките данные – asp.net mvc 3

Excel Скопируйте лист со своим кодом в новый файл xls

Не удалось закрыть Excel даже после выпуска ресурсов

Как сгруппировать значения, которые находятся в excel для HashMap

Можно ли автоматизировать процесс excel с помощью java?

Копирование и вставка определенных значений ячеек на другой лист

Экспорт в Excel не отображает цифры правильно

EXCEL – вычисление разницы между военными временами для получения минут

извлекать текст из ячейки excel

Разрыв сообщения для чтения во время кодирования в Excel VBA

быстрее выполнять поиск в файлах excel

Неправильное имя файла при нажатии кнопки «Открыть» в «Сохранить / Открыть диалог»

Скопируйте диапазон значений от ws1 до ws2 в книге с использованием .Range () и .Cells ()

Функция поиска Excel-VBA не рассматривает первую строку столбца

Разрыв страницы SSRS не применяется PageName

Давайте будем гением компьютера.