SendKeys 等待参数 false 或 true 之间有什么区别

问题描述 投票:0回答:1

以下链接解释了 SendKeys 等待参数 false 或 true 之间的区别。

等待可选。指定等待模式的布尔值。如果为 False(默认值),则在发送密钥后立即将控制权返回到过程。如果为 True,则必须在控制权返回到过程之前处理击键。

https://learn.microsoft.com/tr-tr/office/vba/language/reference/user-interface-help/sendkeys-statement?f1url=%3FappId%3DDev11IDEF1%26l%3Dtr-TR%26k%3Dk (vblr6.chm1009015)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv15)%26rd%3Dtrue

但我不明白这意味着什么。

这是第一个代码:

Sub Macro1_ForFalseExample()
 'If False (default), control is returned to the procedure immediately after the keys are sent
 Range("A1").Select
 SendKeys "Fruit Name", False
 Range("A2").Value = "Apple"
End Sub

这是第二个代码:

Sub Macro2_ForTrueExample()
 'If True, it sends the keys, and then waits for the user to press another key
  Range("B1").Select
  SendKeys "Car Name", True
  Range("B2").Value = "Toyota"
 End Sub

当我运行上面的代码时,我看不出有什么区别。

excel vba sendkeys
1个回答
0
投票

使用

SendKeys
,考虑
wait
参数会很有帮助,它为您提供了
SendKeys
同步操作 (
wait=true
) 或异步操作 (
wait=false
) 的选项。当然不是那么简单,但它可以帮助理解其含义。

使用

wait=true
不会等待用户按下任何键,它只是等待程序完成处理按键后再返回代码。

取决于您实际发送的内容以及您的自动化期望是什么,但默认使用

true
通常会很有帮助,因为它使界面有时间对您的输入做出反应。如果您发送了一个命令,例如 copypaste,那么您会希望该操作在执行下一行代码之前完成。

  • 如果您发送 ctrl+c(复制),但您的下一行代码需要捕获数据,那么您需要
    wait=true
    ,否则后续的 ctrl+v(粘贴)可能会粘贴之前捕获的内容,或者如果您的代码执行速度比您正在自动化的界面可以跟上的速度快,则什么也没有。

如果

SendKeys
之后没有后续代码,那么等待与否都无关紧要,在这种情况下
wait=false
会给人一种性能更好的印象,因为你的代码将立即继续执行。

等待与否的一般含义是应用程序可能具有需要时间执行的关键事件处理程序逻辑,在某些情况下应用程序甚至可能阻止处理。如果您的逻辑在

SendKeys
之后检查 UI,那么您将始终想要使用
wait=true

MS VBA 参考自动化计算器为例

Dim ReturnValue, I 
ReturnValue = Shell("CALC.EXE", 1)    ' Run Calculator. 
AppActivate ReturnValue     ' Activate the Calculator. 
For I = 1 To 100    ' Set up counting loop. 
    SendKeys I & "{+}", True    ' Send keystrokes to Calculator 
Next I    ' to add each value of I. 
SendKeys "=", True    ' Get grand total. 
SendKeys "%{F4}", True    ' Send ALT+F4 to close Calculator. 

如果您没有等待应用程序完成按键处理,您的代码可能会比 UI 运行得更快,并可能导致 UI 丢失一些按键消息。

SendKeys
不是通用队列,如果应用程序未准备好接收输入,则消息将被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.