2009-12-16 88 views
2

我有一些Excel電子表格很難打到數據庫(100多個查詢對總賬表...)。只刷新我所在的工作表(SHIFT + F9)在某些電子表格中很有用,但我想要一種刷新所選單元格的方法。我用下面的代碼上來,放在ThisWorkbook對象:Excel VBA重新計算選擇

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

下載的你應該能夠使用以下命令:

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

因爲用戶可能沒有選擇一個範圍(例如他們可能選擇了一個圖表),所以你應該在'Set rng'行放置一些錯誤處理。

通過使用應用程序對象,您不需要捕獲Workbook_SheetSelectionChange事件。

+0

完美!我懷疑有一種更簡單的方法,但Excel VBA的世界對我來說還是很新的。 – Scott 2009-12-17 16:34:28

2

如果你只是想重新計算當前選定的細胞,而忽略依賴於他們,你可以用我的RangeCalc插件細胞,從 http://www.decisionmodels.com/downloads.htm

+0

看起來您的外掛程序完全符合我的要求。我希望我可以接受多個答案。公平地說,我不得不接受Chris Spicer的回答,因爲我解決了他的問題。 – Scott 2009-12-17 16:36:09

+0

謝謝:RangeCalc插件還自動處理Range.Calculate的一些怪癖:請參閱 http://www.decisionmodels.com/calcsecretsg.htm – 2009-12-18 10:25:55

4

如果使用上面你接受的答案的方法應該首先檢查你的...

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 

你也可能希望將其添加到圖紙和SHEETNAME上下文菜單。 您需要做的兩個命令欄的名稱是... 「Cell」和「Ply」