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?

8
demandé sur Sam 2013-07-01 10:30:51

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

step 2

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

4

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

7
répondu 2013-07-01 07:25:40