Excel VBA毫不延迟地发送密钥
我正在尝试使用Sendkeys尽可能快地将一些单元格从excel复制到另一个Windows应用程序。如果我不使用“等待”,Sendkeys将失败。如果使用它,Sendkeys运行缓慢,我需要全速、实时(如果可能)。 有人能帮我吗? 对不起我的英语,我是一名巴西学生。 多谢各位Excel VBA毫不延迟地发送密钥,vba,excel,sendkeys,Vba,Excel,Sendkeys,我正在尝试使用Sendkeys尽可能快地将一些单元格从excel复制到另一个Windows应用程序。如果我不使用“等待”,Sendkeys将失败。如果使用它,Sendkeys运行缓慢,我需要全速、实时(如果可能)。 有人能帮我吗? 对不起我的英语,我是一名巴西学生。 多谢各位 Public Const MOUSEEVENTF_RIGHTUP As Long = &H10 Private Sub SingleClick() mouse_event MOUSEEVENTF_LEFT
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Private Sub SingleClick()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Private Sub DoubleClick()
'Simulate a double click as a quick series of two clicks
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Private Sub RightClick()
'Simulate a right click
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTTUP, 0, 0, 0, 0
End Sub
Sub Botão1_Clique()
'copy b2 and past in a specific area (another windows application)
Range("B2").Copy
SetCursorPos 765, 70
SingleClick
Application.SendKeys "^v"
Application.Wait (Now + 0.000007) ' It is the faster I can use but it's not enough
Range("B3").Copy
SetCursorPos 765, 80
SingleClick
Application.SendKeys "^v"
Application.Wait (Now + 0.000007)
Range("B4").Copy
SetCursorPos 765, 90
SingleClick
Application.SendKeys "^v"
End Sub
虽然这可能不是执行实时交易的最佳方式,但我认为您可以修改SendKey语句以包含等待。我相信这个
Application.SendKeys“^v”,True
将强制您的代码暂停,直到命令执行为止,这可能比您编写的代码要快。不要使用SendKeys。他们非常不可靠。使用//API
请参阅我演示如何粘贴到第三方应用程序的示例
基于此,这里有一个简单的示例,介绍如何将Excel粘贴到第三方应用程序
示例代码(未经测试)
Private声明函数SendMessage Lib“user32”别名“SendMessage a”_
(ByVal hwnd为长,ByVal wMsg为长,ByVal wParam为长_
lpram(如有)一样长
私有声明函数findwindowlib“user32”别名“FindWindowA”_
(ByVal lpClassName作为字符串,ByVal lpWindowName作为字符串)长度相同
私有声明函数FindWindowEx Lib“user32”别名“FindWindowExA”_
(ByVal hWnd1为长,ByVal hWnd2为长,ByVal lpsz1为字符串_
ByVal lpsz2(作为字符串)一样长
私有常量WM_粘贴长度=&H302
小博托乌派()
暗网
我想我会坚持多久
“~~>将“BLAHBLAH”更改为第三方应用程序的标题。
Ret=FindWindow(vbNullString,“BLAHBLAH”)
如果Ret为0,则
“~~>将“BLAHBLAH”更改为文本框的类型
“~~>假设要粘贴到文本框,否则请更改它
Ret=FindWindowEx(Ret,ByVal 0&,“BLAHBLAH”,vbNullString)
如果Ret为0,则
“~~>只在5个单元格中循环
“~~>根据需要进行更改
对于i=1到5
此工作簿。工作表(“表1”)。范围(“B”和“i”)。副本
“~~>粘贴
SendMessage Ret,WM_粘贴,0,ByVal 0
多芬特
接下来我
其他的
调试.打印“未找到第三方应用程序中的文本框”
如果结束
其他的
调试。打印“未找到第三方应用程序”
出口接头
如果结束
端接头
您试图将其粘贴到哪个其他windows应用程序?它支持自动化吗?如果是这样,请不要使用SendKeys
。我正试图向我的房屋经纪人(股票市场)发送订单。我需要复制并粘贴代码股票,股票数量和价格。试试下面的答案。否则,当我搜索“Homebroker”或“My Homebroker”时,谷歌什么也找不到。您确定这是应用程序的名称吗?我想看看他们是否提供任何类型的API,你可以参考…对不起!Homebroker不是一个特殊的应用程序。这就是我们如何称呼我们用来交易的虚拟场所。我可以发布链接,但只能用葡萄牙语:(该应用程序名为Operator+不要使用SendKey。它们非常不可靠。使用FindWindow/SendMessage APIConfirmed:我尝试过,但没有成功。我知道这不是正确的交易方式。我爱Excel,并承诺我可以使用此系统。就这样。我不会投资我的家庭基金!)我会用“.True”再试一次。非常感谢你的回答。非常感谢你,大卫,西德哈特,我将学习FindWindow/SendMessage。我不是程序员,但我喜欢Excel VBA,现在,我也喜欢这个网站好的,我有同样的SendKeys问题。我使用“无标题记事本”尝试了这段代码,得到了“未找到第三方应用程序”(所以文本框还不是问题)。任何识别第三方应用程序窗口和GUI组件的代码,以及如何找到WM_PASTE的值,在这里都很有用。
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Const WM_PASTE As Long = &H302
Sub Botão1_Clique()
Dim Ret
Dim i As Long
'~~> Change "BLAHBLAH" to the caption of the 3rd party app.
Ret = FindWindow(vbNullString, "BLAHBLAH")
If Ret <> 0 Then
'~~> Change "BLAHBLAH" to the type of textbox
'~~> Assuming that you want to paste to textbox else change it
Ret = FindWindowEx(Ret, ByVal 0&, "BLAHBLAH", vbNullString)
If Ret <> 0 Then
'~~> Looping through only 5 cells
'~~> Change as applicable
For i = 1 To 5
ThisWorkbook.Sheets("Sheet1").Range("B" & i).Copy
'~~> Paste
SendMessage Ret, WM_PASTE, 0, ByVal 0
DoEvents
Next i
Else
Debug.Print "TextBox in 3rd Party Application Not Found"
End If
Else
Debug.Print "3rd party Application Not Found"
Exit Sub
End If
End Sub