Wojciech Mania

Wojciech Mania
Informatyk/wdrożenio
wiec

Temat: VBA - eksport do CSV - dodanie kodowania

Witam,

Potrzebuję do poniższego kodu dodać kodowanie utf-8. Aktualnie po eksporcie brakuje mi w pliku polskich znaków :)
W sieci jest sporo przykładowych kodów ale niestety mój stopień wiedzy jest poniżej krytyki :)

Sub CopyToCSV()
Application.ScreenUpdating = False

Dim MyPath As String
Dim MyFileName As String
'The path and file names:
MyPath = "..\Desktop"

MyFileName = "export " & Format(Date, "yyyy-mm-dd")
'Makes sure the path name ends with "\":
If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
'Makes sure the filename ends with ".csv"
If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"
'Copies the sheet to a new workbook:
Sheets("export").Copy
'The new workbook becomes Activeworkbook:


With ActiveWorkbook
'Saves the new workbook to given folder / filename:
On Error Resume Next
.SaveAs Filename:= _
MyPath & MyFileName, _
FileFormat:=xlCSVMSDOS, _
Local:=True, _
CreateBackup:=False


'Closes the file
.Close False

End With

End Sub
Andy L.

Andy L. ITM, VUB

Temat: VBA - eksport do CSV - dodanie kodowania

Export Sheet as UTF-8
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: VBA - eksport do CSV - dodanie kodowania

Jak nie chcesz kodów to może gotowe narzędzie: http://vbatools.pl/dodatek-xls-do-csv/
Robiące przy okazji parę innych zadań związanych z eksportem.
Andy L.

Andy L. ITM, VUB

Temat: VBA - eksport do CSV - dodanie kodowania

Jak nie chcesz dodatków zaśmiecających excela to użyj kodu :)
Wojciech Mania

Wojciech Mania
Informatyk/wdrożenio
wiec

Temat: VBA - eksport do CSV - dodanie kodowania

W kodzie zmieniłem zapis z
  FileFormat:=xlCSVMSDOS, _


NA

  FileFormat:=xlCSV, _


i polskie znaki się pojawiły :)

Potestuję chwilę i zobaczę efekty.Ten post został edytowany przez Autora dnia 15.02.17 o godzinie 15:29
Wojciech Mania

Wojciech Mania
Informatyk/wdrożenio
wiec

Temat: VBA - eksport do CSV - dodanie kodowania

Witam,
jednak musiałem przebudować kod, aby móc eksportować dane z kodowaniem utf-8.

Jeszcze pozostały mi 2 problemy:
1. Separatory, zmiana z "," na ";" (zastosowanie Local :=True niestety nie działa lub w złym miejscu zastosowałem :))
2. Przy zapisywaniu pliku drugi raz o tej samej nazwie, nadpisuję plik bez pytania o zgodę.

Poniżej kod:

Option Explicit

Const strDelimiter = """"
Const strDelimiterEscaped = strDelimiter & strDelimiter
Const strSeparator = ","
Const strRowEnd = vbCrLf
Const strCharset = "utf-8"

Function CsvFormatString(strRaw As String) As String

Dim boolNeedsDelimiting As Boolean

boolNeedsDelimiting = InStr(1, strRaw, strDelimiter) > 0 _
Or InStr(1, strRaw, Chr(10)) > 0 _
Or InStr(1, strRaw, strSeparator) > 0

CsvFormatString = strRaw

If boolNeedsDelimiting Then
CsvFormatString = strDelimiter & _
Replace(strRaw, strDelimiter, strDelimiterEscaped) & _
strDelimiter
End If

End Function

Function CsvFormatRow(rngRow As Range) As String

Dim arrCsvRow() As String
ReDim arrCsvRow(rngRow.Cells.Count - 1)
Dim rngCell As Range
Dim lngIndex As Long

lngIndex = 0

For Each rngCell In rngRow.Cells
arrCsvRow(lngIndex) = CsvFormatString(rngCell.Text)
lngIndex = lngIndex + 1

Next rngCell


CsvFormatRow = Join(arrCsvRow, ",") & strRowEnd

End Function

Sub CsvExportRange( _
rngRange As Range, _
Optional strFileName As Variant _
)

Dim rngRow As Range
Dim objStream As Object

If IsMissing(strFileName) Or IsEmpty(strFileName) Then
strFileName = Application.GetSaveAsFilename( _
InitialFileName:="export " & Format(Date, "yyyy-mm-dd") & ".csv", _
FileFilter:="CSV (*.csv), *.csv", _
Title:="Export CSV")


End If

Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2
objStream.Charset = strCharset
objStream.Open

For Each rngRow In rngRange.Rows
objStream.WriteText CsvFormatRow(rngRow)
Next rngRow

objStream.SaveToFile strFileName, 2
objStream.Close

End Sub

Sub CsvExportUTF8()
CsvExportRange Application.Sheets("export").UsedRange
End Sub

Sub CsvExportSheet(varSheetIndex As Variant)


Dim wbkExport As Workbook
Dim shtToExport As Worksheet

Set shtToExport = ThisWorkbook.Worksheets("export") 'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add

End Sub
Ten post został edytowany przez Autora dnia 20.02.17 o godzinie 12:26
Wojciech Mania

Wojciech Mania
Informatyk/wdrożenio
wiec

Temat: VBA - eksport do CSV - dodanie kodowania

Pkt. 1 udało się wykonać.

Wystarczyłą zmiana zapisu w kodzie.

Z :
  CsvFormatRow = Join(arrCsvRow, ",") & strRowEnd 


NA:
  CsvFormatRow = Join(arrCsvRow, ";") & strRowEnd 
Damian Zurawski

Damian Zurawski Data Engineer w
Grupie Żywiec

Temat: VBA - eksport do CSV - dodanie kodowania

Rozwiązanie problemu nr 2:

W procedurze CsvExportRange zamień linijkę

objStream.SaveToFile strFileName, 2


na:


On Error Resume Next
objStream.SaveToFile strFileName, 1
If Err.Number = 3004 Then
MsgBox "File with this name already exists, try to save it with different name"
CsvExportRange Application.Sheets("export").UsedRange
End If


:)Ten post został edytowany przez Autora dnia 22.03.17 o godzinie 11:57

Temat: VBA - eksport do CSV - dodanie kodowania

Hej, można to ograniczyć do określonego zakresu ? Powiedzmy od A1:H1 i wszystko co poniżej ?

Następna dyskusja:

VBA - dodanie zdarzenia do ...




Wyślij zaproszenie do