Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在单击按钮时使用VBA将多张工作表从Excel加载到MySQL_Excel_Vba - Fatal编程技术网

在单击按钮时使用VBA将多张工作表从Excel加载到MySQL

在单击按钮时使用VBA将多张工作表从Excel加载到MySQL,excel,vba,Excel,Vba,我有多个工作表,我需要能够上传到一个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>;DA

我有多个工作表,我需要能够上传到一个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

我现在尝试从列中的数据值行填充数组。不过我还是遇到了一些问题。我似乎无法让它将行中的每一列构建到数组中,然后加入它。

下面是数组的循环:

    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 = Worksheets(Datasheets(i)).Range("A" & rng.Row & ":" & (Col_Letter(numcol)) & rng.Row).Value
            insertValues = Join2D(valuesArray, "','")
            Sql = "INSERT INTO colocar." & Datasheets(i) & Sheetcolumns(i) & "VALUES('" & insertValues & "')"
        Worksheets(Sheet2.Name).Range("A100") = Sql
            'con.Execute Sql
        Next Row
    End With
Next i

仍在排除SQL执行时出错的原因。

所有表字段都是文本数据类型吗?我倾向于从一个包含两个元数据表(1)表id、源表名称、目标表名称(2)表id、源列名/编号、目标字段名、目标数据类型的工作表中驱动它。这种类型的信息在工作表中比在VBA中混合时更容易管理。混合、一些数字、一些日期和一些varchar。至于从工作表中驱动他们-你能提供一个例子吗?我不知道这是如何帮助我进行SQL查询的。@TimWilliams我想我只是不明白制作一个与数组内容完全相同的工作表是如何帮助我更改SQL查询中使用的列数,并以动态方式添加&row.cells(n).Value的。我意识到我在这方面很愚蠢。我只需要用正确的值为每一行填充一个数组。
    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 = Worksheets(Datasheets(i)).Range("A" & rng.Row & ":" & (Col_Letter(numcol)) & rng.Row).Value
            insertValues = Join2D(valuesArray, "','")
            Sql = "INSERT INTO colocar." & Datasheets(i) & Sheetcolumns(i) & "VALUES('" & insertValues & "')"
        Worksheets(Sheet2.Name).Range("A100") = Sql
            'con.Execute Sql
        Next Row
    End With
Next i