Comment puis-je utiliser VBA pour ajouter une connexion (à une Source de données externe) dans Excel et la sauvegarder dans la liste des connexions de cette feuille de calcul Excel
je peux utiliser VBA pour créer un nouvel ADODB.Connexion et ADODB associé.Commandement et ADOBD.Parameter puis créer un pivot et un pivot
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
... Mais après que j'ai lancé cette macro, si je vérifie les propriétés de connexion dans la liste des connexions (dans l'onglet Données du ruban) elles apparaissent désactivées (grisées) et la commande SQL n'apparaît pas là (limitant les autres changements par VBA seulement).
Comment puis-je créer ces mêmes objets, mais elles ont intégrer avec L'interface utilisateur Excel pour que les futurs utilisateurs n'aient pas besoin d'utiliser VBA? Des idées?
1 réponses
Vous pouvez utiliser un enregistreur de macro pour générer un code VBA qui ajoutera une connexion à votre instance excel.
J'ai ajouté le code à la fin de cette réponse, cependant, vous pouvez générer votre propre si vous suivez les étapes ci-dessous:
1) Démarrer un Macro-enregistreur
2) Sur le ruban, cliquez sur Data
onglet. Cliquez sur le Connections
, puis choisissez le Add
bouton comme indiqué dans la en dessous de screenshot
3) sur l'écran suivant, choisissez votre connexion DB existante, et suivez les étapes sur les 2 ou 3 écrans suivants pour configurer votre connexion.
4) Une fois que votre connexion est établie et apparaît dans la liste des connexions, cliquez sur Properties
bouton et sur l'écran suivant Export Connection File
5) arrêtez votre Macro enregistreur et ouvrez VBE
(alt+F11)
et éditez le code dans votre Module1
6) supprimez ces lignes de votre macro code
.ServerFillColor = False
.ServerFontStyle = False
.ServerNumberFormat = False
.ServerTextColor = False
7) Sauvegardez et fermez le fichier maintenant
notez que lorsque vous réouvrez le fichier et lancez la macro, la connexion doit être ajoutée à votre liste de connexions
vous pouvez maintenant ajouter de la connexion à partir du fichier exporté avec cette code
Workbooks("Book1").Connections.AddFromFile _
"C:\Users\...\exported_file_name.odc"
ou pouvez exécuter le code enregistré et laissez la macro de l'ajouter pour vous