엑셀 VBA 매크로로 CSV파일을 출력할때 문자 설정을 하지 않아 글자가 깨지는 경우가 있습니다.
이러한 경우 CSV파일을 저장할 때에 문자 코드를 UTF-8로 지정해줘야 합니다.
그리고 BOM은 지정하지 않도록 하겠습니다.
출력 형식
・구분자 콤마(,)
・문자 코드 UTF-8
・BOM 지정 안함
Sub CSV_UTF8()
Dim fileDate As String
Dim maxRow As Long
Dim maxCol As Long
Dim iCount As Long
Dim jCount As Long
Dim stream
Dim streamTmp
Dim buf As String
'현재 날짜 및 시간 취득
fileDate = Format(Now, "_YYYYMMDDHHNNSS")
'마지막 행 취득
maxRow = ActiveSheet.Range("A1").End(xlDown).Row
'마지막 열(컬럼) 취득
maxCol = ActiveSheet.Range("A1").End(xlToRight).Column
'파일을 저장할 경로 지정
Dim FolderName As String
'매크로 파일이 있는 폴더 안에 csv폴더를 만들도록 지정
FolderName = ActiveWorkbook.Path & "\csv"
'지정한 경로에 폴더가 없는 경우에만 생성
If Dir(FolderName, vbDirectory) = "" Then
MkDir FolderName
End If
'저장할 파일명 설정
Dim strFilePath As String
strFilePath = FolderName & "\csv" & fileDate & ".csv"
Set streamTmp = CreateObject("ADODB.Stream")
With streamTmp
.Type = 2
.Charset = "UTF-8"
.Open
For iCount = 1 To maxRow
buf = ""
For jCount = 2 To maxCol - 1
buf = buf & Cells(iCount, jCount) & ","
kCount = jCount
Next jCount
buf = buf & Cells(iCount, kCount + 1) & vbCrLf
.WriteText buf, adWriteLine
Next iCount
End With
With streamTmp
.Position = 0
.Type = 1
.Position = 3
End With
Set stream = CreateObject("ADODB.Stream")
With stream
.Type = 1
.Open
.write streamTmp.read()
.savetofile strFilePath, 2
.Close
'stream.savetofile strFilePath, 2
End With
streamTmp.Close
MsgBox ("CSV파일을 생성했습니다." & vbLf & vbLf & varFile)
End Sub
궁금한 내용이나 잘못된 곳이 있으면 코멘트 남겨주세요.
감사합니다.
댓글