Excel模块 - 将多个单元格作为表格连接的输入

时间:2017-01-18 11:42:45

标签: excel vba excel-vba

我想创建一个模块,从多个单元格和工作表中获取输入以创建查询,然后使用该查询进行连接。

我已经复制了一个用于不同Excel文件的模块,并为数据透视表执行相同的工作,但我希望能够使用普通表。

概述excel文件:

表"设置"以及必须用于过滤的名称列表。

Sheet" 2014年所有事件"使用具有连接的表,并且必须使用新查询刷新。

Sheet" SQL"有没有WHERE语句我想使用的查询。连接字符串也已放在这里。

我觉得下面的行是错误的,通常你会使用.PivotTable,如果它是数据透视表,但这次它是一个表。我想知道我必须使用什么来使用表格。

{{1}}

1 个答案:

答案 0 :(得分:0)

测试了很多解决方案,但没有什么是真正的解决方案。所以我已将数据透视表更改为表格形式并将其用作表格。

以下模块为我工作:

Function Update_2017()
'------------------------------------------------------------------------------------------------------------
Dim time_I As String
Dim boundary As String
Dim ExclMonth As String
Dim pt_I As PivotTable
Dim sql_I1 As String
Dim sql_I2 As String
Dim connection As String
Dim in_sql As String
'------------------------------------------------------------------------------------------------------------
in_sql = ""
boundary = ActiveWorkbook.Worksheets("Settings").Range("F5").Value
sql_I1 = ActiveWorkbook.Worksheets("SQL").Range("B3").Value
sql_I2 = ActiveWorkbook.Worksheets("SQL").Range("B4").Value
Set pt_I = ActiveWorkbook.Worksheets("PivotBase 2017").Range("B3").PivotTable
connection = ActiveWorkbook.Worksheets("SQL").Range("B2").Value
'ExclMonth = ActiveWorkbook.Worksheets("Settings").Range("B11").Value
'ExclMonth = Left(ExclMonth, 6) & Right(ExclMonth, 1) + 1
'------------------------------------------------------------------------------------------------------------
For Each s In ActiveWorkbook.Worksheets("Settings").Range("C4:C500")
If s.Value = "" Then
    in_sql = in_sql
    Else
        in_sql = in_sql & "'%" & s.Value & "%'," '& vbCrLf
End If

Next s
    in_sql = Left(in_sql, Len(in_sql) - 1)
'------------------------------------------------------------------------------------------------------------
'Change connection type to OLEDB to edit sql, assemble sql, overwrite sql, reassign old connection (changing the command text in ODBC triggers refresh, in OLEDB no refresh triggered)
pt_I.PivotCache.connection = "OLEDB;"
sql_I1 = sql_I1 & boundary & sql_I2 & ", table (sys.odcivarchar2list (" & in_sql & ")) Where SERVICE like column_value"
pt_I.PivotCache.CommandText = sql_I1
pt_I.PivotCache.connection = connection

'------------------------------------------------------------------------------------------------------------
'Update pivot cache
pt_I.PivotCache.Refresh

End Function