강좌 / 팁

소프트웨어 엑셀(64bit) 시작시 기본 한글 입력모드로 VBA

2020.10.28 14:01

지후빠 조회:1877 추천:13

안녕하십니까? 요즘 집사람 오더를 받아 엑셀 VBA 제작에 집중하고 있어 윈포를 자주 못 봤습니다.

 

얼마전 폰으로 잠깐 봤을때 엑셀 시작시 기본 한글 입력모드로 만들어주는 추가기능을 찾는 질문이 있었습니다.

아침에 찾아보니 그 게시물을 못 찾겠습니다. 혹시 게시물 위치 아시는 분 계시면 링크 부탁드립니다.

 

오피스 64bit 나오면서 VBA에서 win32api 선언에 64bit 형식이 추가되어서 기존 32bit용을 64bit에 사용시 오류가 납니다.

구글에서 vba win32api 64bit 로 검색하면 정보를 얻을 수 있습니다. 구글 검색 보기

 

이미 32bit용으로 만드신 분이 계십니다.

https://www.officetutor.co.kr/board/DType/bfrmvw.asp?f_tn=Dqa_excel_n2&f_bno=118357&page=58

 

저는 64bit용 선언부만 추가 하였고 한글, 영어 선택이 쉽도록 lang = "KO" 부분을 추가 하였습니다.

한글로 쓰기 위한 것이라 의미는 없겠지만 원본을 존중하는 차원에서...

 

추가 기능 설치는 파일 - 옵션 - 추가 기능 - 이동 - 찾아보기... 로 추가하시면 됩니다. 한글로시작v0.1.1.xlam

엑셀 2016 64bit 에서 테스트 되었습니다. 32bit에서 테스트(댓글에 결과) 부탁드립니다.

 

아래는 코드 부분인데 PtrSafe 추가 되는 것이 핵심입니다. ^^


Option Explicit

 

#If VBA7 Then

    Private Declare PtrSafe Function GetActiveWindow Lib "user32.dll" () As Long

    Private Declare PtrSafe Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As Long) As Long

    Private Declare PtrSafe Function ImmGetConversionStatus Lib "imm32.dll" (ByVal himc As Long, lpdw As Long, lpdw2 As Long) As Long

    Private Declare PtrSafe Function ImmSetConversionStatus Lib "imm32.dll" (ByVal himc As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

#Else

    Private Declare Function GetActiveWindow Lib "user32.dll" () As Long

    Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As Long) As Long

    Private Declare Function ImmGetConversionStatus Lib "imm32.dll" (ByVal himc As Long, lpdw As Long, lpdw2 As Long) As Long

    Private Declare Function ImmSetConversionStatus Lib "imm32.dll" (ByVal himc As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

#End If

 

Private Sub Workbook_Open()

 

    Dim himc          As Long

    Dim dwConversion  As Long

    Dim dwSentence    As Long

    Dim rc            As Long

    Dim temp          As Long

    Dim lang          As String

    

    lang = "KO" '한글 KO, 영어 EN

    

    himc = ImmGetContext(GetActiveWindow())

    rc = ImmGetConversionStatus(himc, dwConversion, dwSentence)

    

    If rc <> 0 Then

        temp = dwConversion

        temp = temp And &H1

        If temp <> &H1 Then

            If lang = "KO" Then

                dwConversion = dwConversion Or &H1  '한글로 시작

            Else

                dwConversion = dwConversion And &HFFFE  '영문으로 시작

            End If

            rc = ImmSetConversionStatus(himc, dwConversion, dwSentence)

        End If

    End If

 

End Sub

 

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
4480 호환이 안된다는 드라이버 강제로 적용하는 방법 [1] ASUS 13190 0 10-13
4479 ASUS,LG....자동인증 씨디 만들기 [4] 왕대인 14834 0 10-13
4478 구매시 XP가 기본 장착된 모델인 경우 개조안하고 VISTA O... [5] 오다가다 9790 0 10-13
4477 구매시 XP가 기본 장착된 모델인 경우 VISTA OEM으로 [6] 오다가다 11454 0 10-13
4476 기 타| 종이로 시디케이스 만들기(두가지) [5] gooddew 11681 0 10-14
4475 VISTA의 BCDEDIT로 간단히 XP 멀티부팅정보 추가하기 [1] 오다가다 11482 0 10-16
4474 미디어플레이어 64비트 설정 방법 [4] 히로 10667 0 10-18
4473 탐색기에서 파일이동 복사하기 메뉴만들기 [2] gg 10217 0 10-27
4472 윈도탐색기에서 보기옵션 고정하기 [3] gg 10374 0 10-27
4471 Xp 가 탑제된 컴의 Vista 인증원리 [2] 오다가다 12288 0 10-27
4470 [Vista] 레디부스트 지원 안되는 USB 사용방법!? [5] 김용환 11108 0 10-30
4469 비스타 RC 버전 인증기 [4] 묵은지 12086 0 10-31
4468 ReadyBoost, Qsoft의 RamDisk로 "체험"하기 [1] 박정환 13853 0 11-04
4467 즐겨찾기 목록 폴더 자동 원상복구 [1] 퍼온이 10367 0 11-04
4466 지포스 최신 드라이버 설치시 카트라이더 문제점 해결.. [1] 미스터하하 9586 0 11-13
4465 기 타| JRSKD24.SYS 손상에 의한 부팅불가시 복구법..!! [4] gooddew 13987 0 11-14
4464 기 타| 비스타 버전별 기능 [6] gooddew 10130 0 11-17
4463 비스타 서팩1 설치 안될때의 설치방법 제안! [5] 테스트맨 9400 0 11-17
4462 sp1 rc v658 삭제 [4] 미스터하하 7947 0 11-18
4461 비스타 SP1 v658설치 [4] 비스타유져 8848 0 11-18
XE1.11.6 Layout1.4.8