Более быстрый способ обхода именованных диапазонов в VBA - PullRequest
1 голос
/ 05 ноября 2019

Я пытаюсь научиться обходить именованные диапазоны быстрее, возможно, путем расчета вне листа, поскольку я понимаю, что переход к ссылкам на ячейки на листах очень медленный. Вот фрагмент кода, который я пытаюсь переписать - любые советы по 1) как «обновить» вызов перед циклом и 2) как эффективно повторно выполнить цикл приветствуется

Sub test()

Application.Goto Reference:="namedcell0"
ActiveCell.Formula = "0"

For Each c in Range("named_range1")
Application.Goto Reference:="namedcell1"
ActiveCell.FormulaR1C1 = c
Calculate

For Each d in Range("named_range2")
Application.Goto Reference:="namedcell2"
ActiveCell.FormulaR1C1 = d
Calculate

Next
Next

End Sub

1 Ответ

2 голосов
/ 05 ноября 2019

Этот код VBA в основном имитирует клики пользователей и не использует большую часть объектной модели.

Ознакомьтесь с Workbook.Names и Worksheet.Names и классом Excel.Name: вы можете получить Range упоминается Name через его RefersToRange свойство.

При присваивании Range.Formula присваивается формула каждой ячейке этого диапазона:

With ThisWorkbook.Names
    .Item("namedcell0").RefersToRange.Formula = "0" ' why is this a string literal?
    .Item("namedcell1").RefersToRange.Formula = c
    .Item("namedcell2").RefersToRange.Formula = d
End With

Нет необходимости Calculate явно (при условии, что режим расчета является автоматическим - в противном случае рассмотрите возможность расчета только один раз после написания всех формул).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...