2017-10-14 80 views
-2

이것은 내 코드가 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 
+0

어떤 코드를 사용하고 있습니까? 왜'SendKeys'를 사용하고있는가? 특히 두 개의 통합 문서 사이에 있다면 프로그램 적으로이를 달성 할 수있을 것이라고 생각할 때 처리하는 것이 상당히 어려운 방법입니다. – Tom

+0

sendkeys를 사용하는 방법? 짧은 대답 :하지 마! 당신이하려고하는 것은 무엇이든 할 수있는 가장 좋은 방법이 거의 항상 있습니다. 이것이'SendKeys'만이 유일하게 실행 가능한 희귀 한 상황 중 하나라면 코드를 실제로 보여 주면 도움이 될 것입니다. 보이지 않는 코드는 디버그하기가 다소 어렵습니다. [mcve]를 읽으십시오. –

+1

다른 Excel이 별도의 인스턴스 인 경우에도 다른 인스턴스를 Object (https://msdn.microsoft.com/en-us/library/e9waz863(v=v2/90) .aspx)로 가져 오는 것이 좋습니다. , 그리고 전형적인 Excel Object Model을 통해 작업하십시오. – MacroMarc

답변

0

키 보내기 =처럼 같은 일을 키보드의 키를 누르십시오. 화면에있는 것과 똑같습니다. 입력 할 때 키를 보내는 위치를 제어 할 수있는 것과 같은 방식으로 키가 "전송"되는 위치 만 제어 할 수 있습니다. 즉, 키 동작을 적용 할 위치를 먼저 활성화해야합니다. VBA에서는 먼저 다른 창을 활성화해야합니다.

사실, 사실상 모든 것을 객체 모델을 통해 직접 제어 할 수 있기 때문에 키를 다른 Excel 창으로 보낼 필요가 없습니다. 실제로 달성하고자하는 것에 대해 질문하는 경우 더 나은 솔루션을 제공하는 데 도움을 얻을 수 있습니다.