У меня есть задача, где мне нужно экспортировать каждый лист рабочей книги в Excel как отдельный файл .csv с кодировкой utf-8. Первоначально мне было предложено сделать это, чтобы сохранить каждый текст в формате Юникод, а затем обработать их и заменить все разделители табуляции запятыми. У меня есть следующий код, который дает мне часть пути туда. Сбой с кодом ошибки 3002 при попытке выполнить BinaryStream.LoadFromFile FileName. Из того, что я обнаружил, это потому, что файл уже должен быть открыт в Excel, и поэтому функция не может загрузить его в поток ADODB. Помимо этого я довольно застрял. Любая помощь в решении этой проблемы будет принята с благодарностью!

Public Sub ExportSheetsToCSV()

Dim wsExport As Worksheet
Dim wbkExport As Workbook
Dim fileLoc As String

fileLoc = selectDialog() 'Function which allows the user to select the location from a browser window
'fileLoc = "h:\test\"

For Each wsExport In Worksheets
wsExport.Select
nm = wsExport.Name
If Not IsActiveSheetEmpty() Then
    Rows("1:1").Select 'deletes header line
    Selection.Delete Shift:=xlUp
    ActiveSheet.SaveAs FileName:=fileLoc & "\" & nm & ".txt", FileFormat:=xlUnicodeText
    readAndReplace (fileLoc & "\" & nm)
    Application.DisplayAlerts = True
End If

Next wsExport
End Sub

Private Sub readAndReplace(fileNameRead As String)

Dim pos1 As Long, pos2 As Long, i As Long
Dim fileWrite As String, line As String, fileNameWrite As String
Dim writeStream As Object

        fileWrite = Replace(ReadTextFile(fileNameRead), vbTab, ",")

        Set writeStream = CreateObject("ADODB.Stream")
        writeStream.Type = 2
        writeStream.CharSet = "utf-8"
        writeStream.Open
        writeStream.WriteText fileWrite
        writeStream.SaveToFile fileNameWrite, 2

End Sub

'Function from "http://www.motobit.com/tips/detpg_read-write-binary-files/"
Function ReadTextFile(FileName)
  Const adTypeText = 2

  'Create Stream object
  Dim BinaryStream
  Set BinaryStream = CreateObject("ADODB.Stream")

  'Specify stream type - we want To get binary data.
  BinaryStream.Type = adTypeText

  'Specify charset For the source text (unicode) data.
  'If Len(CharSet) > 0 Then
    'BinaryStream.CharSet = CharSet
  'End If

  BinaryStream.CharSet = "utf-8"

  'Open the stream
  BinaryStream.Open

  'Load the file data from disk To stream object
  BinaryStream.LoadFromFile FileName

  'Open the stream And get binary data from the object
  ReadTextFile = BinaryStream.ReadText
End Function

0