10

我可以使用 VBA 创建一个新的 ADODB.Connection 和关联的 ADODB.Command 和 ADOBD.Parameter,然后创建一个 PivotCache 和一个 PivotTable

Sub CreatePivotTable()
    'Declare variables
    Dim objMyConn As ADODB.Connection
    Dim objMyCmd As ADODB.Command
    Dim objMyParam As ADODB.Parameter
    Dim objMyRecordset As ADODB.Recordset

    Set objMyConn = New ADODB.Connection
    Set objMyCmd = New ADODB.Command
    Set objMyRecordset = New ADODB.Recordset

    'Open Connection'
    objMyConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=myMIS;Data Source=localhost;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WKSTN101;Use Encryption for Data=False;Tag with column collation when possible=False"
    objMyConn.Open

    'Set and Excecute SQL Command'
    Set objMyCmd.ActiveConnection = objMyConn
    objMyCmd.CommandText = "select a.col1, a.col2, b.col3, b.col4" & _
                           "from TableA a, TableB b " & _
                           "where a.col3=b.col5 " & _
                           "and a.col1=?"
    objMyCmd.CommandType = adCmdText

    Set objMyParam = objMyCmd.CreateParameter("COLUMN1", adChar, adParamInput, 20, Range("AnotherSheet!A3").Value)

    objMyCmd.Parameters.Append objMyParam

    'Open Recordset'
    Set objMyRecordset.Source = objMyCmd
    objMyRecordset.Open

    'Create a PivotTable cache and report.
    Set objPivotCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
    Set objPivotCache.Recordset = objMyRecordset
    objPivotCache.CreatePivotTable TableDestination:=Range("A11"), TableName:="PivotTable1"

    With ActiveSheet.PivotTables("PivotTable1")
        .SmallGrid = False
        With .PivotFields("Col3")
            .Orientation = xlRowField
            .Position = 1
        End With
        With .PivotFields("Col4")
            .Orientation = xlRowField
            .Position = 1
        End With
        With .PivotFields("Col1")
            .Orientation = xlColumnField
            .Position = 1
        End With
        With .PivotFields("Col2")
            .Orientation = xlDataField
            .Position = 1
        End With
    End With

...但是在我运行这个宏之后,如果我检查连接列表中的连接属性(在功能区的数据选项卡中),它们会显示为禁用(灰色)并且 SQL 命令不会出现在那里(进一步限制仅通过 VBA 更改)。

我怎样才能创建这些相同的对象,但让它们与 Excel UI 集成,这样未来的用户就不需要使用 VBA?有任何想法吗?

4

1 回答 1

8

您可以使用宏记录器生成 VBA 代码,该代码将添加到您的 excel 实例的连接。
我已在此答案的末尾添加了代码,但是如果您按照以下步骤操作,您可以生成自己的代码:
1)启动宏记录器
2)在功能区上,单击Data 选项卡。单击Connections然后选择Add按钮,如下面的屏幕截图所示
第2步
3) 在下一个屏幕上,选择您现有的数据库连接,然后按照接下来的 2 或 3 个屏幕上的步骤配置您的连接。
4)一旦您的连接建立并出现在连接列表中,单击Properties按钮并在下一个屏幕上 5)停止宏记录器并打开并编辑您的代码Export Connection File
4
VBE (alt+F11)Module1 6)从您的宏代码中删除这些行

.ServerFillColor = False
.ServerFontStyle = False
.ServerNumberFormat = False
.ServerTextColor = False

7) 现在保存并关闭文件

请注意,当您重新打开文件并运行宏时,应将连接添加到您的连接列表中


您现在可以使用此代码从导出的文件添加连接

Workbooks("Book1").Connections.AddFromFile _
        "C:\Users\...\exported_file_name.odc"


或者可以运行录制的代码并让宏为您添加它

于 2013-07-01T07:25:40.190 回答