엑셀VBA 한영전환

엑셀VBA 한영전환

VBA 시작시 키입력의 상태가 항상 영문(또는 한글)이도록 세팅하고 싶을 때가 있다.

이를 위해 구글/네이버에서 각종 키워드를 동원해 검색할수록 굉장히 어렵고 난해한 내용을 찾을 수 있다.

IME가 어쩌고… 개인적으로 깊고 어려운 지식에는 약한 편이라, 가장 쉽고 단순무식한 방법을 제시한다.

결론은 엑셀 스프레드 시트에 알파벳 하나를 입력시키고, 그게 a일 경우 영어로 인식하고 ㅁ일 경우 한글로 인식하는 방법이다.

코드는 아래와 같다.

‘키보드 상태확인을 위한 선언하기
Private Declare Function GetAsyncKeyState Lib “user32” (ByVal vKey As Long) As Integer

‘키입력을 위한 선언하기
Const KEYEVENTF_EXTENDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Private Declare Sub keybd_event Lib “user32.dll” (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

‘시간지연(슬립)을 위한 선언하기
Public Declare Sub Sleep Lib “kernel32.dll” (ByVal dwMilliseconds As Long)

Sub Macro1()

‘ Macro1 Macro

‘ 바로 가기 키: Ctrl+k

‘ A를 입력하고 엔터를 누른다.
Sleep (1000)
Call typeA
Call typeEnter

‘해당 값을 기억후, 삭제한다.
Dim tmpVal
tmpVal = ActiveCell.Offset(-1, 0).Value

ActiveCell.Offset(-1, 0).Select
Call typeDelete

‘결과 표시
If tmpVal = “ㅁ” Then
    Call changeHangul
    MsgBox (“영문으로 전환되었습니다.”)
Else
    MsgBox (“이미 영문 상태입니다.”)
End If

End Sub

Function typeA()
‘에이
keybd_event 65, 0, 0, 0
keybd_event 65, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Function

Function typeEnter()
‘엔터
keybd_event 13, 0, 0, 0
keybd_event 13, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Function

Function typeDelete()
‘딜리트
keybd_event 46, 0, 0, 0
keybd_event 46, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Function

Function changeHangul()
‘한영전환
Const VK_HANGUL = &H15
keybd_event VK_HANGUL, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_HANGUL, 0, KEYEVENTF_KEYUP, 0
DoEvents

End Function