Excel VBA пересчитать выбор - PullRequest
       31

Excel VBA пересчитать выбор

2 голосов
/ 16 декабря 2009

У меня есть несколько таблиц Excel, которые довольно сильно бьют по базе данных (более 100 запросов к таблице главной книги ... да!). Обновление только листа, на котором я работаю (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 и загрузить как надстройку для Excel. Возможно ли это с помощью метода, который я использую? Есть ли лучший способ добиться этого?

Ответы [ 3 ]

4 голосов
/ 05 января 2010

если вы используете метод из принятого выше ответа, вы должны сначала проверить, что ...

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 

Также вы можете добавить его в контекстные меню листа и имени листа. Название двух командных панелей, которые вам нужно сделать, это ... «Клетка» и «Сгиб»

3 голосов
/ 17 декабря 2009

Вы должны быть в состоянии использовать следующее:

Public Sub RecalculateSelection()
    Dim rng As Range
    Set rng = Application.Selection
    rng.Calculate
End Sub

Вы должны поместить некоторую обработку ошибок вокруг строки 'Set rng', поскольку пользователь, возможно, не выбрал диапазон (например, он мог выбрать диаграмму).

Используя объект приложения, вам не нужно захватывать событие Workbook_SheetSelectionChange.

2 голосов
/ 17 декабря 2009

Если вы просто хотите пересчитать выбранные в данный момент ячейки, игнорируя зависимые от них ячейки, вы можете использовать мой модуль RangeCalc, который можно загрузить с http://www.decisionmodels.com/downloads.htm

...