Mogę użyć języka VBA do utworzenia nowego ADODB.Connection i powiązanego polecenia ADODB.Command i ADOBD. parametr, a następnie utworzyć PivotCache oraz tabelę przestawnąJak używać VBA do dodawania połączenia (do zewnętrznego źródła danych) w programie Excel i zapisywania go na tej liście arkuszy kalkulacyjnych programu Excel
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
... ale po ja uruchomić to makro, gdybym sprawdzić właściwości połączenia na liście połączeń (w zakładce Dane wstęgi) pojawiają się one wyłączone (wyszarzone) i polecenie SQL nie pojawia się tam (ograniczając dalsze zmiany tylko za pomocą VBA).
Jak mogę utworzyć te same obiekty, ale czy można je zintegrować z interfejsem Excel, aby przyszli użytkownicy nie musieli używać VBA? Jakieś pomysły?
Czy sugerujesz, że połączenia nie zostały zapisane w pliku xls, ale można je wyeksportować do pliku .odc, który zostanie załadowany przy następnym otwarciu pliku xls? – Sam
, jeśli nadal tracisz połączenie, jest to praca do pobrania z zapisanego pliku. jeśli ponownie go zarejestrujesz, wówczas wszystkie osoby korzystające z arkusza kalkulacyjnego Excela będą mogły eksportować/importować własny ciąg połączenia. –
Dzięki za pomoc. – Sam