无法写入文件名并同时单击“保存”按钮…VBA代码
我正试图保存一个PDF文件。 使用下面的代码,我将更改文件名,但在无法写入文件名并同时单击“保存”按钮…VBA代码,vba,excel,savefiledialog,Vba,Excel,Savefiledialog,我正试图保存一个PDF文件。 使用下面的代码,我将更改文件名,但在SendMessageByString hWnd、WM_SETTEXT、Len(Sample)、Sample之后 命令对话框失去焦点,然后我无法保存文件 该文件是: 从网络上。我尝试直接从URL下载,但不起作用 命令: timeout = Now + TimeValue("00:00:20") Do hWnd = FindWindow(vbNullString, "Save As") 'Finding the sav
SendMessageByString hWnd、WM_SETTEXT、Len(Sample)、Sample之后
命令对话框失去焦点,然后我无法保存文件
该文件是:
从网络上。我尝试直接从URL下载,但不起作用
命令:
timeout = Now + TimeValue("00:00:20")
Do
hWnd = FindWindow(vbNullString, "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
我使用获取对话框的句柄。如果我在
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
我可以获得对话框的焦点,但命令不会使用更改的文件名保存文件。它将其另存为OnlineStmtResultsPremDis.Do的原始名称
看起来像
如何更改文件名并保存pdf
我的代码:
****浏览网页****然后
Do While IE.Busy Or IE.ReadyState <> 4: Loop
Application.Wait (Now + TimeValue("00:0:03"))
IE.Navigate "https://www..com/CWRWeb/OnlineStmtResultsPremDis.do" 'Final PDF
Application.Wait (Now + TimeValue("00:0:18"))
Set HTMLDoc5 = IE.document
Application.SendKeys "+^{S}" 'Save Key ShortCut
Application.Wait (Now + TimeValue("00:0:03"))
'Finding the Save As Dialog Box
timeout = Now + TimeValue("00:00:20")
Do
hWnd = FindWindow(vbNullString, "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
If hWnd Then
SetForegroundWindow hWnd
'Find the child DUIViewWndClassName window
hWnd = FindWindowEx(hWnd, 0, "DUIViewWndClassName", vbNullString)
End If
If hWnd Then
'Find the child DirectUIHWND window
hWnd = FindWindowEx(hWnd, 0, "DirectUIHWND", "")
End If
If hWnd Then
'Find the child FloatNotifySink window
hWnd = FindWindowEx(hWnd, 0, "FloatNotifySink", "")
End If
'If hWnd Then
'hWnd = FindWindowEx(hWnd, 0, "ComboBox", vbNullString) 'Child Combo Box
'End If
If hWnd Then
hWnd = FindWindowEx(hWnd, 0, "ComboBox", "") 'Child Combo Box
End If
If hWnd Then
SetForegroundWindow (hWnd) 'Chilf Edit Window
Sleep 600
hWnd = FindWindowEx(hWnd, 0, "Edit", "") 'Child Combo Box
End If
Sample = "80287.pdf" 'Misc. need to delete
If hWnd Then
SetForegroundWindow (hWnd) 'changing the folder name
Sleep 600
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
End If
'Do
'hWnd = FindWindow(vbNullString, "Save As") 'Finding the save as window
'DoEvents
'Sleep 200
'Loop Until hWnd Or Now > timeout
If hWnd Then
SetForegroundWindow (hWnd)
hWnd = FindWindowEx(hWnd, 0, "Button", "&Save") 'Finding the Save button on the window
End If
If hWnd Then
SetForegroundWindow (hWnd) 'Click on the Save As window
Sleep 600
SendMessage hWnd, BM_CLICK, 0, 0
End If
End Sub
所以我修改了代码,添加了一条PostMessage,重点放在编辑框上:代码可以工作,但我不确定如何
If hWnd Then
'SetForegroundWindow (hWnd) 'changing the folder name
'Sleep 200
SendKeys "{BACKSPACE}"
Sleep 200
For x = 1 To Len(Sample)
lngPM = PostMessage(hWnd, WM_SETTEXT, Asc(Mid(Sample, x, 1)), 1&)
Sleep 200
Next x
Sleep 200
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
End If
Application.Wait (Now + TimeValue("00:0:03"))
我正在使用32位Ms excel 2016 Ms Office。。。windows 7 64位。。。完整代码:
Do
hWnd = FindWindow("#32770", "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
If hWnd Then
'SetForegroundWindow hWnd
'Find the child DUIViewWndClassName window
hWnd = FindWindowEx(hWnd, 0, "DUIViewWndClassName", vbNullString)
End If
If hWnd Then
'Find the child DirectUIHWND window
hWnd = FindWindowEx(hWnd, 0, "DirectUIHWND", "")
End If
If hWnd Then
'Find the child FloatNotifySink window
hWnd = FindWindowEx(hWnd, 0, "FloatNotifySink", "")
End If
'If hWnd Then
' hWnd = FindWindowEx(hWnd, 0, "ComboBoxEx32", vbNullString) 'Child Combo Box
'End If
If hWnd Then
hWnd = FindWindowEx(hWnd, 0, "ComboBox", "") 'Child Combo Box
End If
If hWnd Then
SetForegroundWindow (hWnd) 'Chilf Edit Window
Sleep 600
hWnd = FindWindowEx(hWnd, 0, "Edit", "") 'Child Combo Box
End If
Filename1 = Cells(I, 2).Value
Filename2 = Cells(I, 3).Value
Sample = "D:\Test\" & Filename1 & "_" & Filename & "_" & Filename2 & ".pdf" 'CHANGE : FILE NAME
If hWnd Then
'SetForegroundWindow (hWnd) 'changing the folder name
'Sleep 200
SendKeys "{BACKSPACE}"
Sleep 200
For x = 1 To Len(Sample)
lngPM = PostMessage(hWnd, WM_SETTEXT, Asc(Mid(Sample, x, 1)), 1&)
Sleep 200
Next x
Sleep 200
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
End If
Application.Wait (Now + TimeValue("00:0:03"))
Do
hWnd = FindWindow(vbNullString, "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
If hWnd Then
'SetForegroundWindow (hWnd)
hWnd = FindWindowEx(hWnd, 0, "Button", "&Save") 'Finding the Save button on the window
End If
If hWnd Then
'SetForegroundWindow (hWnd) 'Click on the Save As window
Sleep 600
SendMessage hWnd, BM_CLICK, 0, 0
End If
Label1:
IE.Quit
Application.Wait (Now + TimeValue("00:0:10"))
I = I + 1
Loop
End Sub
所以我修改了代码,添加了一条PostMessage,重点放在编辑框上:代码可以工作,但我不确定如何
If hWnd Then
'SetForegroundWindow (hWnd) 'changing the folder name
'Sleep 200
SendKeys "{BACKSPACE}"
Sleep 200
For x = 1 To Len(Sample)
lngPM = PostMessage(hWnd, WM_SETTEXT, Asc(Mid(Sample, x, 1)), 1&)
Sleep 200
Next x
Sleep 200
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
End If
Application.Wait (Now + TimeValue("00:0:03"))
我正在使用32位Ms excel 2016 Ms Office。。。windows 7 64位。。。完整代码:
Do
hWnd = FindWindow("#32770", "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
If hWnd Then
'SetForegroundWindow hWnd
'Find the child DUIViewWndClassName window
hWnd = FindWindowEx(hWnd, 0, "DUIViewWndClassName", vbNullString)
End If
If hWnd Then
'Find the child DirectUIHWND window
hWnd = FindWindowEx(hWnd, 0, "DirectUIHWND", "")
End If
If hWnd Then
'Find the child FloatNotifySink window
hWnd = FindWindowEx(hWnd, 0, "FloatNotifySink", "")
End If
'If hWnd Then
' hWnd = FindWindowEx(hWnd, 0, "ComboBoxEx32", vbNullString) 'Child Combo Box
'End If
If hWnd Then
hWnd = FindWindowEx(hWnd, 0, "ComboBox", "") 'Child Combo Box
End If
If hWnd Then
SetForegroundWindow (hWnd) 'Chilf Edit Window
Sleep 600
hWnd = FindWindowEx(hWnd, 0, "Edit", "") 'Child Combo Box
End If
Filename1 = Cells(I, 2).Value
Filename2 = Cells(I, 3).Value
Sample = "D:\Test\" & Filename1 & "_" & Filename & "_" & Filename2 & ".pdf" 'CHANGE : FILE NAME
If hWnd Then
'SetForegroundWindow (hWnd) 'changing the folder name
'Sleep 200
SendKeys "{BACKSPACE}"
Sleep 200
For x = 1 To Len(Sample)
lngPM = PostMessage(hWnd, WM_SETTEXT, Asc(Mid(Sample, x, 1)), 1&)
Sleep 200
Next x
Sleep 200
SendMessageByString hWnd, WM_SETTEXT, Len(Sample), Sample
End If
Application.Wait (Now + TimeValue("00:0:03"))
Do
hWnd = FindWindow(vbNullString, "Save As") 'Finding the save as window
DoEvents
Sleep 200
Loop Until hWnd Or Now > timeout
If hWnd Then
'SetForegroundWindow (hWnd)
hWnd = FindWindowEx(hWnd, 0, "Button", "&Save") 'Finding the Save button on the window
End If
If hWnd Then
'SetForegroundWindow (hWnd) 'Click on the Save As window
Sleep 600
SendMessage hWnd, BM_CLICK, 0, 0
End If
Label1:
IE.Quit
Application.Wait (Now + TimeValue("00:0:10"))
I = I + 1
Loop
End Sub
我不明白你怎么能保存为窗口。您是手动执行还是在某处调用SaveAs?Application.SendKeys“+^{S}”。。。。使用快捷键ctrl+shift+s可能你应该试试这个。保存文件名后你能更改它吗?简单的重命名/移动命令?为什么不使用SaveAs函数而不是SendKeys?就像这里:我不明白你怎么能保存为窗口。您是手动执行还是在某处调用SaveAs?Application.SendKeys“+^{S}”。。。。使用快捷键ctrl+shift+s可能你应该试试这个。保存文件名后你能更改它吗?简单的重命名/移动命令?为什么不使用SaveAs函数而不是SendKeys?就像这里: