我想创建一个脚本来打开Windows应用程序并使用该应用程序执行某项任务。我列出了我想在下面自动化的活动:
应用程序是PTC完整性。它与数据库服务器链接,其中包含许多具有唯一ID的文件。所以我需要使用ID打开文档并导出它。
步骤:
我想知道使用哪个脚本来自动执行此过程,即,我提供了一系列ID,脚本将打开应用程序,然后使用ID打开文档并导出它们,直到导出所有ID。使用Excel VBA可以完成。
答案 0 :(得分:1)
是的,您可以在VBA中执行此操作。 您的VBA可以通过使用PTC完整性命令行界面的Shell命令调用批处理文件。
要导出文档,您可以使用'im exportissues'CLI命令。
要同步调用批处理文件,可以使用下面的ShellandWait函数或查看相关的StackOverflow问题。
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess _
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle _
As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Sub ShellAndWait(ByVal program_name As String, _
Optional ByVal window_style As VbAppWinStyle = vbNormalFocus, _
Optional ByVal max_wait_seconds As Long = 0)
'http://www.vbforums.com/showthread.php?t=505172
' Example:
' Private Sub Form_Load()
' Me.Show
' ShellAndWait "Notepad.exe", , 3
' Me.Caption = "done"
' End Sub
Dim lngProcessId As Long
Dim lngProcessHandle As Long
Dim datStartTime As Date
Const WAIT_TIMEOUT = &H102
Const SYNCHRONIZE As Long = &H100000
Const INFINITE As Long = &HFFFFFFFF
' Start the program.
On Error GoTo ShellError
lngProcessId = Shell(program_name, window_style)
On Error GoTo 0
DoEvents
' Wait for the program to finish.
' Get the process handle.
lngProcessHandle = OpenProcess(SYNCHRONIZE, 0, lngProcessId)
If lngProcessHandle <> 0 Then
datStartTime = Now
Do
If WaitForSingleObject(lngProcessHandle, 250) <> WAIT_TIMEOUT Then
Exit Do
End If
DoEvents
If max_wait_seconds > 0 Then
If DateDiff("s", datStartTime, Now) > max_wait_seconds Then Exit Do
End If
Loop
CloseHandle lngProcessHandle
End If
Exit Sub
ShellError:
End Sub