드로우홀릭 더베이직
한/영 자동 바꿈을 말하는 것이 아닙니다. 한/영 자동 전환에 대해서 말씀을 드리는 것입니다.
한/영 자동 전환은, 특정 컨트롤에 커서가 있다가 다른 컨트롤로 이동시 한글 / 영문 입력 상태가 자동으로 바뀌는 것을 말합니다.
<그림 1> '고객업체코드'는 영문으로 입력해야 합니다. 그래서 영문 입력 상태로 입력하였습니다.
<그림 2> '고객업체명'에서 데이터를 입력하면 자동으로 한글이 입력됩니다. 한/영 전환을 하지 않았는데도 말이죠.
<그림 3> 이렇게 된 것은, 액세스 컨트롤의 'IME 모드' 속성이 '한글'로 되어 있기 때문입니다.
사실, 제가 권장하는 것은 'IME 모드' 속성을 '현재 상태 유지'로 하는 것 입니다. 대부분의 입력자는 자신이 한글 입력 상태인지, 영문 입력상태인지 인지하고 있는 상태이거든요. 그래서, 이를 인위적으로 변경하는 것은 오히려 불편함을 야기할 수 있습니다.
'현재 상태 유지'로 하게 되면, 사용자가 한/영 전환을 하지 않는 한, 한/영 입력 모드를 변경하지 않습니다.
문제는.. 액세스 폼은 기본적으로 '한글' 상태로 가 있는 것인데요..
전체 프로그램에 대해, IME 모드를 '현재 상태 유지'로 일괄적으로 변경해 주는 VBA 코드를 제공하겠습니다.
이 프로시저를 실행하면, 현재 데이터베이스의 모든 폼을 열어서, IME 모드를 '현재 상태 유지'로 변경해 줍니다.
Public Sub gsbSetIMEMode() '2009-06-26, 염기웅 '현재 프로젝트의 모든 폼의 IME모드를 '현재 상태 유지'로 변경해 주는 프로시저 'IME모드가 3(사용안함)일 경우에는 변경하지 않는다. --> '암호' 컨트롤일 가능성이 있음 '실행하기 전 열려 있는 폼이 없어야 한다. On Error GoTo Herror Dim Obj As Object Dim frm As Access.Form Dim lngAnswer As VbMsgBoxResult Dim strMsg As String Dim ctr As Control '작업 확인 strMsg = "현재 프로젝트의 모든 폼의 컨트롤에 대해서 IME모드를 '현재 상태 유지'로 변경합니다." & vbNewLine & _ "계속 하시겠습니까?" lngAnswer = MsgBox(strMsg, vbYesNo) If lngAnswer = vbNo Then Exit Sub '상태 체크: 모든 폼은 닫혀 있어야 한다. For Each frm In Forms Select Case frm.Name Case Else MsgBox "열려 있는 폼이 있습니다." Exit Sub End Select Next '모든 폼에 대해서 수행 For Each Obj In CurrentProject.AllForms '폼 열기 DoCmd.OpenForm Obj.Name, acDesign Set frm = Forms(Obj.Name) '작업 수행 For Each ctr In frm.Controls sbSetIMEMode ctr Next '폼 닫기 DoCmd.Close acForm, Obj.Name, acSaveYes DoEvents Next MsgBox "IME모드 속성을 고쳤습니다." Exit Sub Herror: Select Case Err.Number Case Else MsgBox Err.Description & vbNewLine & Err.Number Stop End Select End Sub Public Sub gsbSetCurrFormIMEMode() Dim frm As Access.Form Dim ctr As Access.Control Set frm = Screen.ActiveForm '작업 수행 For Each ctr In frm.Controls Debug.Print ctr.Name sbSetIMEMode ctr Next MsgBox "IME모드 속성을 고쳤습니다." End Sub Private Sub sbSetIMEMode(ctr As Control) On Error Resume Next Select Case ctr.IMEMode Case 3 '3 = fmIMEModeDisable --> 주로 암호 입력란에 포함되어 있을 가능성이 높다. Exit Sub Case 0 '0 = fmIMEModeNoControl --> '현재 상태 유지' Exit Sub Case Else ctr.IMEMode = 0 End Select End Sub
이 기능을 동작하려면, 'gsbSetIMEMode' 프로시저를 실행하면 됩니다.
만약, 특정 폼 하나만 설정하려면, 특정 폼을 디자인 보기로 연 다음, 'gsbSetCurrFormIMEMode' 프로시저를 실행하면 되겠습니다.