Excel selenium VBA中“打开”对话框中的“将密钥发送到文件名”字段

Excel selenium VBA中“打开”对话框中的“将密钥发送到文件名”字段,excel,vba,selenium,Excel,Vba,Selenium,我试图设计一个代码来打开特定的URL,在特定的点上,我遇到了与该网站相关的打开对话框。。是这样的 现在我遇到的问题是,我需要将特定路径粘贴到文件名字段,如“C:\Users\User\Desktop\Pics(423).jpg”,然后单击打开按钮 我还被困在如何使用剪贴板复制内存中的路径上。。 感谢高级帮助如果要避免使用SendKeys方法,可以使用user32.dll中的或SendMessage函数。这将允许您使用Windows API与对话框窗口交互 VBA中的UIAutomationCl

我试图设计一个代码来打开特定的URL,在特定的点上,我遇到了与该网站相关的打开对话框。。是这样的

现在我遇到的问题是,我需要将特定路径粘贴到文件名字段,如“C:\Users\User\Desktop\Pics(423).jpg”,然后单击打开按钮

我还被困在如何使用剪贴板复制内存中的路径上。。
感谢高级帮助

如果要避免使用
SendKeys
方法,可以使用user32.dll中的或
SendMessage
函数。这将允许您使用Windows API与对话框窗口交互

VBA中的
UIAutomationClient
库中没有很多在线资源,但是(和)应该足够好,可以让您开始使用

编辑: 但是,如果您决定使用
SendMessage
,下面是一个如何实现它的示例:

1) 将以下内容放在代码模块的顶部 2) 添加以下子过程并将FileName的值更改为所需的值
看起来像是上传?如果存在类型为“文件”的输入字段,则可以使用sendKeys方法发送文件的路径。。。。然后提交表格。非常感谢。我试图避免使用sendKeys。。如果可能的话,我正在寻找一种与开放对话互动的方法。非常感谢。我看过这些视频,事实上这对我来说是全新的东西。我试图利用它,但在这一点上它对我来说似乎很先进。@Yasserkalil-我添加了一个使用
SendMessage
函数的示例。让我知道这是否更有帮助。
Option Explicit

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As String) As LongPtr
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr

Private Const BM_CLICK = &HF5
Private Const WM_SETTEXT = &HC
Sub FillFileNameAndPressOpenButton()

    Dim FileName As Variant
    FileName = "(423)" 'Change this to the appropriate file name

    Dim WindowCaption As String
    WindowCaption = "Open"

    Dim OpenDialogHandle As LongPtr
    OpenDialogHandle = FindWindow(vbNullString, WindowCaption)

    If OpenDialogHandle = 0 Then
        MsgBox "Couldn't find the Window"
        Exit Sub
    End If

    Dim TextBoxHandle As LongPtr, tempHandle As LongPtr
    tempHandle = FindWindowEx(OpenDialogHandle, 0, "ComboBoxEx32", vbNullString)
    tempHandle = FindWindowEx(tempHandle, 0, "ComboBox", vbNullString)
    TextBoxHandle = FindWindowEx(tempHandle, 0, "Edit", vbNullString)

    If TextBoxHandle = 0 Then
        MsgBox "Couldn't find the textbox"
        Exit Sub
    End If

    Dim Rslt As LongPtr
    Rslt = SendMessage(TextBoxHandle, WM_SETTEXT, 0, FileName)
    DoEvents

    Dim ButtonHandle As LongPtr, ButtonCaption As String
    ButtonCaption = "&Open"
    ButtonHandle = FindWindowEx(OpenDialogHandle, 0, "Button", ButtonCaption)

    If ButtonHandle = 0 Then
        MsgBox " Couldn't find the button"
        Exit Sub
    End If

    Rslt = SendMessage(ButtonHandle, BM_CLICK, 0, 0)
    DoEvents

End Sub