본문 바로가기
ADO

[ADO] 구글 주소록 한글 깨짐을 해결하자

by 일등미노왕국 2023. 2. 17.

본인의 업무는 일주일에 신규 매장에 관한 인폼을 정리하여 구글 주소록에 업데이트 해야 하는 업무를 한다.

그러나 구글 주소록에서 [내보내기]로 받은 파일을 바로 열때는 인코딩 문제로 인해 한글 깨짐 현상이 발생한다.

구글링을 해도 단순하게 메모장으로 구글주소록을 연 후 [다른이름으로저장] 옵션에서 변경하여 인코딩문제를 해결하는 방법뿐이었다.

VBA 코드를 통해서 이를 해결해 보려했지만 통곡의 코드벽에서 막혀 새벽을 날린 후 아침에 푸념섞인 투정(?)을 하자 나의 히어로 갓엑사남님이 응답주셨다.

은근 츤데레 매력 있음.....등치는 산만해 가지고...

구마적 스펙보다 훨씬 오바스펙임 우리 엑사남님은...

 

더보기
Option Explicit
Sub OpenCsv()

    Dim Rs As Object: Set Rs = CreateObject("ADODB.Recordset")
    Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim strFilter$, strPath$, strFileName$
    Dim strSQL$, strConn$
    Dim strTB$, strDB$
    
    With Application.FileDialog(msoFileDialogFilePicker)            '= 파일선택 대화창
        .Filters.Clear                                              '= 기존 파일 필터링 삭제
        .Filters.Add "CSV Files (*.csv)", "*.csv"                   '= CSV 파일만 필터링
        .Show                                                       '= 파일 대화창 오픈
        
        If .SelectedItems.Count = 0 Then                            '= 취소시 종료
            Exit Sub
        Else
            strPath = .SelectedItems(1)                             '= 선택하면 Full 경로 저장
        
        End If
    End With

    strFileName = FSO.GetFileName(strPath)                          '= Fso 통해서 파일명만 담아라
    strDB = Replace(strPath, strFileName, "")                       '= 리플레이스를 통해서 폴더명만 담아라
    
    Sheets("주소록").Cells.ClearContents                            '= 주소록시트 전체영역 삭제

    strTB = strFileName                                             '= 파일명을 strTB에 담아라

    strSQL = "SELECT * FROM [" & strTB & "]"                        '= 파일테이블에서 모든 열을 가져와라

    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDB & ";" & _
              "Extended Properties=""text;HDR=no;FMT=Delimited(,);CharacterSet=65001"";"

    Rs.Open strSQL, strConn                                         '= Sql 접속하여 쿼리를 실행해라

    Sheets("주소록").[a1].CopyFromRecordset Rs                      '= 복사한 레코드셋을 출력해라

    Rs.Close
    Set Rs = Nothing                                                '= 레코드셋 초기화
    
    Sheets("주소록").Activate
    MsgBox "주소록 추출을 완료했습니다."

End Sub

sql 전문가답게 sql로 야무지게 해주셨다. 인코딩문제는 strConn에서 CharacterSet=65001이 핵심이다. 저게 안되서 계속 한글깨짐 현상이 발생하였다.

 

늘 생각하는거지만  코드 한줄이 완성코드와 미완성코드를 가르는 한줄이다.

 

구글주소록(한글깨짐해결).xlsm
0.07MB

댓글