so ist es eine ziemliche Herausforderung gewesen .... Hier ist meine Lösung Fenster ein „speichern unter“ Handle Es kann viel einfacher sein, wenn Sie nur auf "Speichern" klicken würden. Meine Lösung ist komplizierter, da ich angeben, wo die Datei gespeichert werden soll. Dazu müssen Sie die richtige Combobox finden, die viel kostet der Iteration
WinAPI notwendigen Erklärungen:
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 Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageW" (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
Public Declare Function SendNotifyMessage Lib "user32" Alias "SendMessageA" (_
ByVal hWnd As Long, _
ByVal Msg As Integer, _
ByVal ByValByValwParam As Integer, _
ByVal lParam As String) As Integer
Actual VBA-Code:
Sub SaveAsWindow()
Dim Winhwnd As Long
Dim prev As Long
Dim abc As Long
Dim strText As String
Dim rty As Variant
Dim Parent As Long
Dim child As Long
Winhwnd = FindWindow(vbNullString, "Save As")
For i = 1 To 20
strText = String$(100, Chr$(0))
abc = GetClassName(Winhwnd, strText, 100)
If Left$(strText, 12) = "DirectUIHWND" Then GoTo here1
Winhwnd = FindWindowEx(Winhwnd, 0&, vbNullString, vbNullString)
Next i
here1:
Parent = Winhwnd
child = FindWindowEx(Parent, 0&, vbNullString, vbNullString)
GoTo skip 'avoid this part for the 1st run
here2:
'fix child3 and child2
If child2 = 0 Then
rty = "0&"
Else
rty = 0
End If
If child3 = 555 Then
rty = "0&"
child3 = ""
End If
skip:
For i = 1 To 20
child = FindWindowEx(Parent, child, vbNullString, vbNullString)
For x = 1 To 20
If child3 = "" Then rty = 0
child2 = FindWindowEx(child, rty, vbNullString, vbNullString)
abc = GetClassName(child2, strText, 100)
If Left$(strText, 8) = "ComboBox" Then
child3 = FindWindowEx(child2, 0&, vbNullString, vbNullString)
If child3 = 0 Then
child3 = 555
GoTo here2
Else
GoTo here3
End If
End If
Next x
Next i
here3:
'this is te filepath. will be pasted into combobox. to adapt to your needs.
SendNotifyMessage child3, &HC, 0&, "C:\Users\username\abc.pdf"
'Get again the Save button
Winhwnd = FindWindow(vbNullString, "Save As")
buttn = FindWindowEx(Winhwnd, 0, "Button", "&Save")
'click on the save button
SendMessage buttn, &HF5&, 0, 0
End Sub
2. VBA-Code: Für SAP, da es einfacher zu sein, erweist sich aufgrund ComboboxEx32 statt Combobox verwendet wird.
Sub test()
Dim Winhwnd As Long
Dim strText As String
Winhwnd = FindWindow(vbNullString, "Save As")
combo = FindWindowEx(Winhwnd, 0, vbNullString, vbNullString)
For i = 1 To 20
combo = FindWindowEx(Winhwnd, combo, vbNullString, vbNullString)
strText = String$(100, Chr$(0))
abc = GetClassName(combo, strText, 100)
If Left$(strText, 12) = "ComboBoxEx32" Then GoTo here
Next i
here:
SendNotifyMessage combo, &HC, 0&, "C:\Users\username\abc.pdf"
buttn = FindWindowEx(Winhwnd, 0, "Button", "&Open")
SendMessage buttn, &HF5&, 0, 0
End Sub
Fazit, das ist nicht der perfekteste Code, aber ich konnte nichts anderes im Web finden. Ich hoffe, dass dies allen zugute kommen wird, die das gleiche Problem haben.
So rufen Sie Excel SaveAs Dialogfeld ist relativ einfach. Es gibt eine Diskussion über solchen Code hier https://social.msdn.microsoft.com/Forums/en-US/69e81793-94d2-49a1-ab82-a3acdb4c81d4/saveas-dialog-box?forum=isvvba. Alles andere würde einen Blick auf Ihren vorhandenen Code erfordern, um Ihr Problem besser zu verstehen. – Variatus
Hallo Variatus, seine SAP, die den Dialog nennen, nicht ich. Wenn es das tut, kann ich keinen Code ausführen, weil VBA möchte, dass ich es schließe, bevor ich den Rest des Codes wieder aufnehme. Danke. – OGERWOLF
Lass mich das klarstellen. Ruft SAP Excel an, um ihm Daten zu geben und das Excel-Blatt in PDF zu speichern? – Variatus