【问题标题】:Excel VBA Recalculate SelectionExcel VBA 重新计算选择
【发布时间】:2009-12-16 00:29:15
【问题描述】:

我有一些 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 插件加载。我使用的方法可以做到这一点吗?有没有更好的方法来实现这一点?

【问题讨论】:

    标签: excel xla vba


    【解决方案1】:

    您应该能够使用以下内容:

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

    您应该在“Set rng”行周围放置一些错误处理,因为用户可能没有选择范围(例如,他们可能选择了图表)。

    通过使用应用程序对象,您无需捕获 Workbook_SheetSelectionChange 事件。

    【讨论】:

    • 完美!我怀疑有一种更简单的方法,但 Excel VBA 的世界对我来说还是很陌生。
    【解决方案2】:

    如果您使用上述已接受答案中的方法,则应首先检查...

    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】:

      如果您只想重新计算当前选定的单元格,忽略依赖于它们的单元格,您可以使用我的 RangeCalc 插件,可从 http://www.decisionmodels.com/downloads.htm

      【讨论】:

      • 看起来你的插件完全符合我的要求。我希望我能接受多个答案。公平地说,我不得不接受 Chris Spicer 的回答,因为我接受了他的解决方案。
      • 谢谢:RangeCalc 插件还自动处理 Range.Calculate 的一些怪癖:参见decisionmodels.com/calcsecretsg.htm
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      相关资源
      最近更新 更多