Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 VBA毫不延迟地发送密钥_Vba_Excel_Sendkeys - Fatal编程技术网

Excel VBA毫不延迟地发送密钥

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

我正在尝试使用Sendkeys尽可能快地将一些单元格从excel复制到另一个Windows应用程序。如果我不使用“等待”,Sendkeys将失败。如果使用它,Sendkeys运行缓慢,我需要全速、实时(如果可能)。 有人能帮我吗? 对不起我的英语,我是一名巴西学生。 多谢各位

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