Я написал 2 сабвуфера для автоматизации ежедневного задания.
Первая подпрограмма MatriksFlowUpdate
вызывает 2 другие подпрограммы RightClick and SingleClick
для имитации щелчка правой кнопкой мыши и затем щелчка левой кнопкой мыши в определенной части экрана.Это сделано для того, чтобы другая программа предложила создать файл Excel и сохранить его в C :.Эта подпрограмма работает правильно сама по себе (т.е. она имитирует щелчок правой кнопкой мыши и щелчок левой кнопкой мыши в нужных местах на экране, запрашивая другую программу для создания листа Excel)
Второй подпрограмма CloseInstance
находит лист Excelсоздан выше, и закрывает его.Этот саб также правильно работает сам по себе.
Однако, когда я пытаюсь вызвать эти 2 саба один за другим в другом сабвуфере MainSequence
, я получаю сообщение об ошибке, указывающее, что Excel должен быть найден и закрытвторой саб не может быть найден.Поэтому я получаю сообщение об ошибке в сабвуфере CloseInstance в расположении ниже
Set xlApp =GetObject("C:\MATRIKS\USER\REPORTS\EXCEL\Temp.xls").Application
Я пробовал много вещей, чтобы это исправить, но я чувствую, что последние несколько дней хожу по кругу.Любая помощь будет высоко ценится.
PS Я впервые публикую aq на stackoverflow, поэтому, пожалуйста, потерпите меня с форматированием.
Public Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub MainSequence()
'This sub pieces together MatriksFlowUpdate and CloseInstance
Call MatriksFlowUpdate
Sleep 2000
Call CloseInstance
End Sub
Sub MatriksFlowUpdate()
'Prompts 3rd party software (Matriks) to produce Excel with latest flow data
Call RightClick
Call SingleClick
End Sub
Private Sub RightClick()
'Simulates a mouse right click at desired screen coordinates
Sleep 1000
SetCursorPos 1750, 750 'x and y position
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub
Private Sub SingleClick()
'Simulates a mouse left click at desired screen coordinates
Sleep 1000
SetCursorPos 1750, 650 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Sub CloseInstance()
'Finds the instance of Excel where Matriks exported its excel and closes that instance of Excel
Dim xlApp As Excel.Application
Dim WB As Workbook
Set xlApp =GetObject("C:\MATRIKS\USER\REPORTS\EXCEL\Temp.xls").Application
Set WB = xlApp.Workbooks("Temp.xls")
WB.Close
End Sub