Как вставить значения ячеек (не диапазон) из листа Excel в существующий файл CSV, используя VBA - PullRequest
0 голосов
/ 17 января 2020

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

1 Ответ

0 голосов
/ 17 января 2020
  1. Итерация по всем активным рабочим листам.
  2. Для каждого листа выполните итерации по всем используемым строкам.
  3. Для каждой строки выполните итерацию по всем столбцам.
  4. Создайте строку строки, заключив значения каждой ячейки в двойные кавычки и разделив их запятыми.
  5. Запись строки в файл CSV.
Const sFilePath = "C:\test\myfile.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

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...