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を使用する必要がないようにできますか何か案は?
マクロレコーダー を使用して、Excelインスタンスへの接続を追加するVBAコードを生成できます。
この回答の最後にコードを追加しましたが、以下の手順に従うと、独自のコードを生成できます。
1)マクロレコーダーを開始する
2)リボンのData
タブをクリックします。 Connections
をクリックして、Add
下のスクリーンショットに示すようなボタン
3)次の画面で既存のDB接続を選択し、次の2または3画面の手順に従って接続を構成します。
4)接続が確立され、接続リストに表示されたら、Properties
ボタンをクリックし、次の画面Export Connection File
5)マクロレコーダーを停止してVBE
(alt+F11)
を開き、Module1
6)マクロコードからこれらの行を削除します
.ServerFillColor = False
.ServerFontStyle = False
.ServerNumberFormat = False
.ServerTextColor = False
7)今すぐファイルを保存して閉じます
ファイルを再度開いてマクロを実行すると、接続が接続リストに追加されます。
これで、このコードを使用して、エクスポートされたファイルから接続を追加できます
Workbooks("Book1").Connections.AddFromFile _
"C:\Users\...\exported_file_name.odc"
または記録されたコードを実行して、マクロに追加させることができます