【问题标题】:How to refresh cells using VBA?如何使用 VBA 刷新单元格?
【发布时间】:2012-11-22 13:39:47
【问题描述】:

我正在使用中出现的所有解决方案:

How to refresh ALL cell through VBA

Getting Excel to refresh data on sheet from within VBA

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True

Application.Calculate

Application.CalculateFull

它们都不能在 Excel 2010 中工作。当我转到单元格并右键单击刷新时,它可以工作。如何在 VBA 中刷新?

Sheets("Name_of_sheet").Range("D424").Refresh 提出一个

异常 438

问题:

  1. 如何让脚本支持 Excel 2003、2007、2010?
  2. 如何使用 VBA 选择要刷新的源文件?

编辑:

  1. 我想模拟鼠标右键单击并在worksheet 3 的菜单中选择刷新。这就是整个故事。

  2. 我正在处理一个 10 年前创建的 Excel 文件。在 Excel 2010 中打开时,我可以转到一个单元格并右键单击它并选择刷新,然后选择要刷新的 .txt 文件。我正在尝试在 VBA 中自动执行此操作。

【问题讨论】:

  • 您是如何加载电子表格的,并且您是否尝试从另一个 s/s 中的代码刷新一个 s/s?请提供更多详细信息
  • 愚蠢的问题,但是否启用了宏?
  • 如果您在应用程序级别启用计算但从原始电子表格打开电子表格,那么您可能计算错误的工作簿。
  • @SiddharthRout 是的 :)
  • 您需要向我们展示您的代码。您列出的所有方法 DO 都有效,因此您做错了其他事情。

标签: excel vba


【解决方案1】:

您可以尝试使用 Application.Calculation

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

【讨论】:

  • 也不行……也许是因为我的第二个问题。如何选择使用 VBA 刷新源文件?
  • @0x90 你可以试试Application.Calculate。我不太明白你的第二个问题。
  • 现在单元格如何从哪里获取数据?所以它会知道该放什么?
  • 您能否发布代码的其他部分,或者解释一下您的工作流程?
【解决方案2】:

对于单个单元格,您可以使用:

Range("D13").Calculate

Cells(13, "D").Calculate

【讨论】:

  • 您使用的是什么版本的 Excel?
【解决方案3】:

我终于用鼠标事件和按键来做到了:

Sheets("worksheet34").Select
Range("D15").Select
Application.WindowState = xlMaximized
SetCursorPos 200, 600 'set mouse position at 200, 600
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) 'click left mouse
Application.SendKeys ("R")

【讨论】:

  • 我今天遇到了这个问题,并尝试了此页面上的所有其他答案。然后我看到了这个,它提醒我我可以在 excel 中记录宏。人...excel 是一个 PITA。
  • @sion_corn 这确实是一个录制宏的选项... :)
【解决方案4】:

只是一个提醒;

使用时要小心

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

这会将整个 Excel 应用程序设置为自动或手动计算公式。如果你使用

Application.Calculation = xlCalculationManual

您会发现您的自动公式不再有效。

干杯

【讨论】:

    【解决方案5】:

    Application.Calculate 不适用于我的功能。即使是DoEvents 也不会。

    我发现可行的是重新输入单元格中的公式。 获取公式的一种简单方法是开始录制macro,使用F2 编辑单元格,然后按enter。该宏将使用所有需要的引号对函数文本进行很好的复制。

    下面是一个例子。

    Sheets("Name_of_sheet").Range("D424").FormulaR1C1 = "=now()"
    

    【讨论】:

      【解决方案6】:

      您可以通过将单元格/范围标记为脏来强制 excel 重新计算单元格或单元格范围。

      例子:

      ' 重新计算 D4 到 D24 列
      Sheets("Name_of_sheet").Range("D4:D24").Dirty

      ' 重新计算单元格 D4
      Sheets("Name_of_sheet").Range("D4").Dirty

      【讨论】:

        猜你喜欢
        • 2021-11-21
        • 1970-01-01
        • 2020-01-02
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-04
        • 2012-09-24
        • 1970-01-01
        相关资源
        最近更新 更多