Загрузите несколько листов в MySQL из Excel, используя VBA по нажатию кнопки - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть несколько листов, которые я должен иметь возможность загружать в базу данных MySQL одним нажатием кнопки.

Проблема 1 - Каждый лист имеет разные столбцы Заголовки Проблема 2 - Каждый лист также имеет различное количество столбцовПроблема 3 - Каждый лист также имеет различное количество строк

Я начал с того, что подумал следующее:

Private Sub Export_Click()
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=<server>;DATABASE=<db>;USER=<user>;PASSWORD=<password>;"

Dim rng As Range

s8columns = "(<28 columns>)"

s9columns = "(<40 columns>)"

s10columns = "(<10 Columns>)"

s12columns = "(<15 Columns>)"

s13columns = "(<18 Columns>)"

s14columns = "(<6 Columns>)"

Sheetcolumns = Array(s8columns, s9columns, s10columns, s12columns, s13columns, s14columns)
Datasheets = Array(Sheet8.Name, Sheet9.Name, Sheet10.Name, Sheet12.Name, Sheet13.Name, Sheet14.Name)

For i = LBound(Datasheets) To UBound(Sheetcolumns)
    colnum = Worksheets(Datasheets(i)).Cells(1, Columns.Count).End(xlToLeft).Column
    Sqlp1 = "INSERT INTO " & Datasheets(i) & " " & Sheetcolumns(i) & " values('"
    For n = 1 To colnum
        Sqlp2 = Sqlp1 & Row.Cells(n).Value
    Next n
    Sql = Sqlp2 & "')"
    Worksheets(Sheet15.Name).Range("A1") = Sql
    With Worksheets(Datasheets(i))
        Set rng = .Range(.Range("A2"), .Cells(.Rows.Count, 1).End(xlUp))
        For Each Row In rng.Rows
            con.Execute Sql
        Next Row
    End With
Next i
con.Close
End Sub

Я застрял на том, как я могу добавить & Row.cells (n).Значение для каждого столбца в текущем листе для запроса Sql.Вы можете составить любые имена столбцов, которые вам нужны, я не могу их дать.

Редактировать:

Позвольте мне показать хороший оператор вставки, чтобы помочь лучше решить проблему

INSERT INTO Table1 (Column1, Column2, Column3, Column4) VALUES ('ABC', '123', '1900-01-01', 12)

Для моего текущего запроса массив для столбцов на каждом листесписок столбцовПроблема, с которой я столкнулся, заключается в том, как я могу динамически получать фрагмент VALUES () в зависимости от количества столбцов и каждого значения в этих столбцах на листе.

Редактировать 2:

For i = LBound(Datasheets) To UBound(Sheetcolumns)
    With Worksheets(Datasheets(i))
        Set rng = .Range(.Range("A2"), .Cells(.Rows.Count, 1).End(xlUp))
        numcol = .Cells(2, Columns.Count).End(xlToLeft).Column
        For Each Row In rng.Rows
            valuesArray = Range("A" & rng.Row & ":" & (Col_Letter(numcol)) & rng.Row).Value
            'Sql = "INSERT INTO " & Datasheets(i) & " " & Sheetcolumns(i) & " values('" & valuesArray & "')"
            MsgBox (Join(valuesArray(), "','"))
            'con.Execute
        Next Row
    End With
Next i
con.Close

Я сейчас пытаюсь заполнить массив из строки значений данных в столбце.Я все еще сталкиваюсь с проблемами, хотя.Я не могу заставить его собрать каждый столбец в строке в массив, а затем соединить его.

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