이것은 내 코드가 excel (a)인데 실제로 나는 다른 Excel (b) 마녀에게 데이터를 전송하는 것입니다 (잠깐만 명령을 입력 할 수 있습니다) & 메시지 단추 코드 (vba)에 대한 액세스 권한이 없습니다. (a)에서 데이터를 삽입 할 수 있으며 step_1은 a), b), d), e) 명령 단추와 c) 메시지 상자로 이동해야합니다. step_2 내 결과를 얻으려면 한 번 더해야합니다. 내 결과가 준비가되었을 때 마지막으로, (a)는 PROJECT.xls에 (B)에서 복사 할 수있는 방법을 찾을 수 없습니다 = B 에서 ThisWorkbook는vba와 함께 sendkeys를 사용하는 방법
Public Declare Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare 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
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Generate_XL(start_row As Integer, end_row As Integer)
Dim xlWorkbookNewFileName As String
Dim i As Integer
Dim cmt As Comment
Set cmt = ActiveCell.Comment
For i = start_row To end_row
Dim wb As Workbook
Dim wb1 As Workbook
Dim FileName As String
Dim FilePath As String
FileName = Cells(i, 1).Value
If Cells(i, 20) = "s0" Then
Set wb = ThisWorkbook
Set wb1 = Workbooks.Open("H:\PROJECT.xls")
'STEP_1
Worksheets("sheetA").Select
' max X = 1250
' max Y = 1250
Application.DisplayAlerts = False
SetCursorPos 1050, 350 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
Worksheets("Menu").Select
SetCursorPos 150, 530 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
If cmt Is Nothing Then
Application.Wait (Now() + TimeValue("00:00:01"))
SendKeys "~" ' pataw <ENTER>
End If
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
SetCursorPos 150, 610 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
SetCursorPos 150, 650 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
'STEP_2
SetCursorPos 505, 434 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
IsTimeToStop = True
SendKeys "~"
SendKeys "~"
SendKeys "{RIGHT 5}"
SendKeys "^c"
IsTimeToStop = True
Application.Wait (Now() + TimeValue("00:00:01"))
'SendKeys "%{ }N" ' = (ALT&tab)
'SendKeys "^a"
'SendKeys "^a"
'Range("l2").Select
'Cells(i, 12).Select
' ElseIf Cells(i, 20) = "a0" Then
' MsgBox ("REST")
' Else: Cells(i, 20) = "x2" Then
' MsgBox ("NOTHING)
End If 'Select
Next i
End Sub
어떤 코드를 사용하고 있습니까? 왜'SendKeys'를 사용하고있는가? 특히 두 개의 통합 문서 사이에 있다면 프로그램 적으로이를 달성 할 수있을 것이라고 생각할 때 처리하는 것이 상당히 어려운 방법입니다. – Tom
sendkeys를 사용하는 방법? 짧은 대답 :하지 마! 당신이하려고하는 것은 무엇이든 할 수있는 가장 좋은 방법이 거의 항상 있습니다. 이것이'SendKeys'만이 유일하게 실행 가능한 희귀 한 상황 중 하나라면 코드를 실제로 보여 주면 도움이 될 것입니다. 보이지 않는 코드는 디버그하기가 다소 어렵습니다. [mcve]를 읽으십시오. –
다른 Excel이 별도의 인스턴스 인 경우에도 다른 인스턴스를 Object (https://msdn.microsoft.com/en-us/library/e9waz863(v=v2/90) .aspx)로 가져 오는 것이 좋습니다. , 그리고 전형적인 Excel Object Model을 통해 작업하십시오. – MacroMarc