我想创建一个模块,从多个单元格和工作表中获取输入以创建查询,然后使用该查询进行连接。
我已经复制了一个用于不同Excel文件的模块,并为数据透视表执行相同的工作,但我希望能够使用普通表。
概述excel文件:
表"设置"以及必须用于过滤的名称列表。
Sheet" 2014年所有事件"使用具有连接的表,并且必须使用新查询刷新。
Sheet" SQL"有没有WHERE语句我想使用的查询。连接字符串也已放在这里。
我觉得下面的行是错误的,通常你会使用.PivotTable,如果它是数据透视表,但这次它是一个表。我想知道我必须使用什么来使用表格。
{{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