Excel selenium VBA中“打开”对话框中的“将密钥发送到文件名”字段
我试图设计一个代码来打开特定的URL,在特定的点上,我遇到了与该网站相关的打开对话框。。是这样的 现在我遇到的问题是,我需要将特定路径粘贴到文件名字段,如“C:\Users\User\Desktop\Pics(423).jpg”,然后单击打开按钮 我还被困在如何使用剪贴板复制内存中的路径上。。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
感谢高级帮助如果要避免使用
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