Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 公式的实时执行_Excel_Execution_Formulas - Fatal编程技术网

Excel 公式的实时执行

Excel 公式的实时执行,excel,execution,formulas,Excel,Execution,Formulas,我们能在不移动单元格光标的情况下执行公式吗?将数据输入到输入单元格后,我们可以按enter键,也可以从该单元格中移出,然后执行与该单元格相关的任何公式。是否有任何方法可以在输入本身时在excel中的输出中看到结果?请帮助我找到此选项。我认为当单元格的“编辑器”具有焦点和控制权时,代码不可能执行。例如,在编辑公式时,尝试在Excel中执行其他操作。我认为,在代码执行之前,单元格必须完成其值或公式的保存 当一个单元格被更新时,你可以有一个公式“监听”,但这有点复杂。一旦更新后,它可能会迫使您返回原始

我们能在不移动单元格光标的情况下执行公式吗?将数据输入到输入单元格后,我们可以按enter键,也可以从该单元格中移出,然后执行与该单元格相关的任何公式。是否有任何方法可以在输入本身时在excel中的输出中看到结果?请帮助我找到此选项。

我认为当单元格的“编辑器”具有焦点和控制权时,代码不可能执行。例如,在编辑公式时,尝试在Excel中执行其他操作。我认为,在代码执行之前,单元格必须完成其值或公式的保存

当一个单元格被更新时,你可以有一个公式“监听”,但这有点复杂。一旦更新后,它可能会迫使您返回原始单元格。下面是如何编写一些代码来“侦听”单元格值的变化。在以下示例中:

  • 我将单元格
    I1
    的值记录到
    strValue
  • 然后我运行一个循环,只要cell
    I1
    的值没有改变,该循环就会一直运行
  • DoEvents
    命令将控制权释放回处理器,这使您可以在运行Excel时在Excel中工作
  • 一旦单元格
    I1
    的值发生变化,
    While
    语句将为false,循环将退出
  • 循环退出后,会弹出一个消息框,告诉您值已更改,然后再次选择原始单元格
"

如果您只是想在每次值更改时将控制返回到原始单元格,您可以使用上面的行而不使用消息框,并在方法执行后返回到循环。请记住,如果这样做,您可能必须找到另一种退出代码的方法


为什么要让它在单元格内执行?任务的最终目的是什么?

按F9键可在不离开输入单元格的情况下重新计算。这在Excel2007中工作。我不确定早期版本。

据我所知,您唯一可用的事件是工作表更改(ByVal Target As Range),该事件在更改完成时触发,即当您离开目标时。在你描述的场景中,你会听什么?在我看来,你需要一个我认为不存在的事件,比如改变。@Mathias-见我上面的例子。它使用
DoEvents
和一个循环来“侦听”单元格值的变化。在Excel 2003中测试宏时,MsgBox仅在按Enter键完成单元格编辑后才会触发。Value属性直到then@barrowc-你说得对。我不相信有一种方法可以在方法被更新之前触发它的执行。但是,如果要立即尝试新值,则过程本身可以强制将焦点返回到单元格。当然,如果你想执行“自动完成建议列表”之类的样式的东西,这对你没有帮助。你能解释一下为什么要这样做吗?我可以看到这个问题,但这样做没有好处。不是批评,只是好奇。
Sub testChange()
Dim strValue As String

strValue = Range("I1").Value

Do While strValue = Range("I1").Value
    DoEvents
Loop

MsgBox "The value changed!"
Range("I1").Activate
End Sub