10

VBA を使用して、新しい ADODB.Connection と関連する ADODB.Command および ADOBD.Parameter を作成し、Pivo​​tCache と 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 のみ)。

これらの同じオブジェクトを作成し、将来のユーザーが VBA を使用する必要がないように Excel UI と統合するにはどうすればよいですか? 何か案は?

4

1 に答える 1

8

マクロ レコーダーを使用して、Excel インスタンスに接続を追加する VBA コードを生成できます。
この回答の最後にコードを追加しましたが、次の手順に従って独自のコードを生成できます
。1) マクロ レコーダーを開始します
。2) リボンで、Data タブをクリックします。をクリックして、下のスクリーンショットに示すようなボタンConnectionsを選択します 。 3) 次の画面で、既存の DB 接続を選択し、次の 2 つまたは 3 つの画面の手順に従って接続を構成します。 4) 接続が確立され、接続リストに表示されたら、ボタンをクリックし、次の画面で 5) マクロ レコーダーを停止し、コードを開いて編集します。Add
ステップ2

PropertiesExport 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 に答える