Excel VBA пересчитывает выбор
Вопрос
У меня есть несколько электронных таблиц Excel, которые довольно сильно попадают в базу данных (более 100 запросов против таблицы Главной книги ... Yikes!). Освежающий только лист, на котором я нахожусь (Shift+F9), полезно в некоторых электронных таблицах, но я хотел обновить только выбранные ячейки. Я придумал следующий код, поместил в объект ThisWorkbook:
Dim currentSelection As String
Private Sub Workbook_Open()
Application.OnKey "+^{F9}", "ThisWorkbook.RecalculateSelection"
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
currentSelection = Target.Address
End Sub
Private Sub RecalculateSelection()
Range(currentSelection).Calculate
End Sub
Если это возможно, я хотел бы сделать это более портативным, например, хранение его в файле XLA и загрузка его в качестве Adcel Addin. Возможно ли это с помощью метода, который я использую? Есть ли лучший способ достичь этого?
Решение
Вы должны иметь возможность использовать следующее:
Public Sub RecalculateSelection()
Dim rng As Range
Set rng = Application.Selection
rng.Calculate
End Sub
Вы должны разместить некоторую обработку ошибок вокруг строки «Установить RNG», так как пользователь, возможно, не выбрал диапазон (например, они могли выбрать диаграмму).
Используя объект приложения, вам не нужно захватить событие Workbook_sheetselectionChange.
Другие советы
Если вы используете метод из принятого ответа выше, вы должны сначала проверить, что ...
If Not Selection Is Nothing Then
If TypeName(Application.Selection) = "Range" Then
Dim Rng As Range
Set Rng = Application.Selection
Rng.Calculate
End If
End If
Также вы можете добавить его в контекстные меню листа и листового анома. Имя двух командных групп, которые вам нужно сделать, это ... «ячейка» и «ply»
Если вы просто хотите пересчитать выбранные в настоящее время ячейки, игнорируя ячейки, которые зависят от них, вы можете использовать мой rangecalc addin, загружаемый изhttp://www.decisionmodels.com/downloads.htm