Posso utilizzare VBA per creare un nuovo ADODB.Connection e ADODB.Command e ADOBD associati. parametri e quindi creare un PivotCache e una tabella pivotCome posso utilizzare VBA per aggiungere una connessione (a un'origine dati esterna) in Excel e salvarlo nell'elenco di fogli di calcolo di Excel di Connections
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
... ma dopo che ho eseguire questa macro, se controllo le proprietà di connessione nella lista Connessioni (nella scheda dati della barra multifunzione) compaiono disabilitato (in grigio) e il comando SQL non appare lì (limitando ulteriori modifiche solo tramite VBA).
Come posso creare questi stessi oggetti ma integrarli con l'interfaccia utente di Excel in modo che gli utenti futuri non debbano utilizzare VBA? Qualche idea?
Stai implicando che le connessioni non vengano salvate nel file xls, ma possono essere esportate in un file .odc che viene caricato al prossimo avvio del file xls? – Sam
se continui a perdere la stringa di connessione, questo è un modo per aggirare il problema da un file salvato. se lo si vuole ridistrare come è allora tutte le persone che usano il foglio di calcolo Excel potranno avere la propria stringa di connessione esportata/importata. –
Grazie per il vostro aiuto. – Sam