Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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_Vba - Fatal编程技术网

宏强制Excel退出编辑模式

宏强制Excel退出编辑模式,excel,vba,Excel,Vba,我有一个宏需要运行更新 如果Excel处于编辑状态,我需要一个宏使Excel退出编辑模式,即控制。这是不可能的,因为Excel在单元格编辑模式下不会运行任何宏。执行此操作的自然方法是使用Application.OnTimer方法,但它有您刚才提到的“编辑问题”。在用户离开编辑模式之前,不会执行被调用的函数 您可以克服这个问题:这个解决方案不是很有效,但是您可以从宏中产生控制,并从计时器(或您选择的任何其他事件)中重新获得控制 以下代码来自Excel计时器函数帮助 当计时器倒计时(或等待其他事件)

我有一个宏需要运行更新


如果Excel处于编辑状态,我需要一个宏使Excel退出编辑模式,即控制。这是不可能的,因为Excel在单元格编辑模式下不会运行任何宏。

执行此操作的自然方法是使用Application.OnTimer方法,但它有您刚才提到的“编辑问题”。在用户离开编辑模式之前,不会执行被调用的函数

您可以克服这个问题:这个解决方案不是很有效,但是您可以从宏中产生控制,并从计时器(或您选择的任何其他事件)中重新获得控制

以下代码来自Excel计时器函数帮助

当计时器倒计时(或等待其他事件)时,您可以继续工作表

Sub a()
  Dim PauseTime, Start, Finish, TotalTime
  If (MsgBox("Press Yes to fire update in 1000 secs", 4)) = vbYes Then
      PauseTime = 1000    ' Set duration 1000 secs or whatever.
      Start = Timer    ' Set start time.
      Do While Timer < Start + PauseTime
          DoEvents    ' Yield to other processes - THIS IS THE TRICK
      Loop
      Finish = Timer    ' Set end time.
      TotalTime = Finish - Start    ' Calculate total time.
      MsgBox "Paused for " & TotalTime & " seconds" 'Program your update HERE
   Else
     End
  End If
End Sub
suba()
暗暂停时间、开始、结束、总时间
如果(MsgBox(“按Yes以在1000秒内触发更新”,4))=vbYes,则
PauseTime=1000'设置持续时间1000秒或其他。
开始=计时器“设置开始时间。
定时器<启动+暂停时间时执行
DoEvents对其他流程的让步——这就是诀窍
环
完成=定时器设置结束时间。
TotalTime=完成-开始'计算总时间。
MsgBox“暂停时间”&TotalTime&“秒”在此处编程更新
其他的
终点
如果结束
端接头
您应该事先调用此宏,可能在打开工作簿事件时调用。
此外,还可以保持循环,在需要时重复更新


您应该检查此策略是否不会干扰特定工作表中使用的其他功能

我想你的意思是在现有宏中?你能试着发送钥匙吗?正确。为强制excel添加一些内容。这是一个想法,我如何发送esc键?有密码吗?
Sub a()
  Dim PauseTime, Start, Finish, TotalTime
  If (MsgBox("Press Yes to fire update in 1000 secs", 4)) = vbYes Then
      PauseTime = 1000    ' Set duration 1000 secs or whatever.
      Start = Timer    ' Set start time.
      Do While Timer < Start + PauseTime
          DoEvents    ' Yield to other processes - THIS IS THE TRICK
      Loop
      Finish = Timer    ' Set end time.
      TotalTime = Finish - Start    ' Calculate total time.
      MsgBox "Paused for " & TotalTime & " seconds" 'Program your update HERE
   Else
     End
  End If
End Sub