2013-08-20 5 views
1

다른 셀에 입력하는 동안 동적으로 워크 시트를 변경하려면 VBA를 사용하고 있습니다. 이렇게하려면, 여기 발견 된 API 코드를 사용하고했습니다키 누름에 Excel VBA 복사 셀

Excel track keypresses

는 그래서 Sub Sheet_Keypress 키를 누르에 원하는 작업을 설명합니다. 그러나, 나는 다음과 같은 문제로 실행했습니다 :

Private Sub Sheet_KeyPress(ByVal KeyAscii As Integer, _ 
         ByVal KeyCode As Integer, _ 
         ByVal Target As Range, _ 
         Cancel As Boolean) 
    Dim Col As String 
    Col = Chr(KeyAscii) 
    Worksheets(1).Range("G" & 4 & ":G" & 6).Value = _ 
     Worksheets(1).Range(Col & 1 & ":" & Col & 3).Value 
End Sub 

을 내가 다시 시트에 가서 처음의 키를 잘 수행하지 행 1-3 어딘가에 입력 할 때. 그러나 두 번째 키 누르기는 기록되지 않으며 추가 키는 오류 1004를 표시합니다.이 오류의 원인은 정확히 무엇이며이를 피할 수 있습니까?

+0

안녕하세요 (내가 아는 한) Excel 워크 시트에 대한 KeyPress 또는 KeyASCII 이벤트가 없습니다 – funk

+0

먼저 키 스트로크가 유효한 열과 일치하는지 확인한 다음 하위 끝에 DoEvents를 포함하십시오. –

답변

0

이 문제는 Enter 키나 Esc 키를 눌러 편집 모드를 종료 할 때까지 Excel에서 사용자가 "편집 모드"(예 : 셀의 값 편집) 중에 워크 시트를 잠그는 것을 막아 버리는 것으로 나타납니다.

따라서 처음 키를 누를 때 키가 제대로 등록되고 Sheet_Keypress이 트리거되지만 Excel이 바로 다음에 "편집 모드"로 들어가고이어서 Worksheets(1).Range("G" & 4 & ":G" & 6).Value에 대한 호출이 다음과 같이 실패하는 것처럼 보입니다. Excel이 시트를 잠급니다. 그럼에도 불구하고 Excel에서는 여전히 키 누름을 등록하고 있습니다. 예를 들어 루틴의 마지막 행을 Application.StatusBar = Col과 같은 것으로 변경하는 경우이를 볼 수 있습니다.

이 문제를 해결하려면 키를 누른 직후에 "편집 모드"에서 Excel을 시작하는 방식으로 코드를 작성해야합니다. 불행히도이 작업을 수행 할 수있는 기본 방법이 없기 때문에 사람들은 다양한 방법으로이 작업을 수행했습니다 (예 : here)

더 간단한 해결책이 있지만 다음과 같은 몇 가지주의 사항이 있습니다. Excel 시트에 표시되지 않으며 수식이 업데이트되기 전에 단 하나의 값만 입력 할 수 있습니다 (따라서 열 AA에 적합하지 않음).

당신이 할 수있는 일은 위의 서브에 Cancel = True 줄을 넣는 것입니다. 그러면 키 누름이 Excel로 이동하지 못하게되어 편집 모드가 활성화됩니다.