Как вставить значения ячеек (не диапазон) из листа Excel в существующий файл CSV, используя VBA

Я успешно написал код для вставки значений ячеек из листа в таблицу SQL с помощью цикла. На исходном листе есть неиспользуемые столбцы, неиспользуемые строки и неправильные заголовки, которые управлялись кодом VBA. Теперь база данных закрывается, и мы хотим использовать файл CSV для загрузки данных в другую базу данных. Какой код используется для открытия файла CSV и вставки данных ячейка за ячейкой?

Всего 1 ответ


  1. Переберите все активные рабочие листы.
  2. Для каждого листа выполните итерации по всем используемым строкам.
  3. Для каждой строки повторите все столбцы.
  4. Создайте строку строки, заключив значения каждой ячейки в двойные кавычки и разделив их запятыми.
  5. Записать строку в файл CSV.
Const sFilePath = "C:	estmyfile.csv"
Const strDelim = ","
Sub CreateCSV_Output()
    Dim ws As Worksheet
    Dim rng1 As Range
    Dim X
    Dim lRow As Long
    Dim lCol As Long
    Dim strTmp As String
    Dim lFnum As Long

    lFnum = FreeFile
    Open sFilePath For Output As lFnum

    For Each ws In ActiveWorkbook.Worksheets
        'test that sheet has been used
        Set rng1 = ws.UsedRange
        If Not rng1 Is Nothing Then
            'only multi-cell ranges can be written to a 2D array
            If rng1.Cells.Count > 1 Then
                X = ws.UsedRange.Value2
                'The code TRANSPOSES COLUMNS AND ROWS by writing strings column by column
                For lCol = 1 To UBound(X, 2)
                    'write initial value outside the loop
                     strTmp = IIf(InStr(X(1, lCol), strDelim) > 0, """" & X(1, lCol) & """", X(1, lCol))
                    For lRow = 2 To UBound(X, 1)
                        'concatenate long string & (short string with short string)
                        strTmp = strTmp & (strDelim & IIf(InStr(X(lRow, lCol), strDelim) > 0, """" & X(lRow, lCol) & """", X(lRow, lCol)))
                    Next lRow
                    'write each line to CSV
                    Print #lFnum, strTmp
                Next lCol
            Else
                Print #lFnum, IIf(InStr(ws.UsedRange.Value, strDelim) > 0, """" & ws.UsedRange.Value & """", ws.UsedRange.Value)
            End If
        End If
    Next ws

    Close lFnum
    MsgBox "Done!", vbOKOnly

End Sub

ссылка


Есть идеи?

10000