Excel VBA重新计算所选内容

Excel VBA重新计算所选内容,excel,xla,vba,Excel,Xla,Vba,我有一些Excel电子表格,它们对数据库的影响非常大(针对总账表的100多个查询…哎呀!)。在某些电子表格中,仅刷新我所在的工作表(SHIFT+F9)很有帮助,但我想找到一种只刷新选定单元格的方法。我在ThisWorkbook对象中找到了以下代码: Dim currentSelection As String Private Sub Workbook_Open() Application.OnKey "+^{F9}", "ThisWorkbook.RecalculateSelectio

我有一些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 Advin加载。我现在用的方法可能吗?是否有更好的方法实现此目的?

如果您只想重新计算当前选定的单元格,而忽略依赖于这些单元格的单元格,则可以使用my RangeCalc addin,可从

您应该能够使用以下功能:

Public Sub RecalculateSelection()
    Dim rng As Range
    Set rng = Application.Selection
    rng.Calculate
End Sub
您应该在“设置rng”行周围放置一些错误处理,因为用户可能没有选择范围(例如,他们可能选择了图表)


通过使用应用程序对象,您无需捕获工作簿\u Sheet SelectionChange事件。

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

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 
此外,您可能希望将其添加到图纸和图纸名称上下文菜单中。 需要执行此操作的两个命令栏的名称是。。。
“电池”和“帘布层”

完美!我怀疑有一个更简单的方法,但是Excel VBA的世界对我来说还是很新的。看起来你的插件正是我想要的。我希望我能接受不止一个答案。公平地说,我不得不接受Chris Spicer的回答,因为我同意他的解决方案。谢谢:RangeCalc addin还自动处理Range的一些怪癖。计算:请参阅