2010-08-23 11 views
1

J'essaie de créer une table liée dans MS Access liée à une feuille Excel. Je veux faire cela via VBScripting.Liaison d'une feuille Excel à une table dans MS Access - Utilisation de VBScript

Mon scénario est que j'aurai une feuille Excel qui sera mise à jour très souvent. Mais mon script récupère les valeurs de la table dans MSAccess qui devrait être une réplique de la feuille Excel (table liée). Donc je veux savoir s'il y a du code dans VBScript dans lequel je peux créer une table liée à une feuille Excel.

+2

Cela semble un peu étrange. Si l'Excel est déjà lié, les nouvelles valeurs apparaîtront. La feuille ne doit être liée qu'une seule fois. Quel est le problème que vous essayez de surmonter avec cette approche? – Fionnuala

Répondre

1

Voici un exemple de script.

Dim cn ''As ADODB.Connection 
    Dim ct ''As ADOX.Catalog 
    Dim tbl ''As ADOX.Table 

    Dim strLinkXL ''As String 
    Dim strMDB ''As String 

    strLinkXL = "C:\Docs\LTD.xls" 
    strMDB = "C:\Docs\LTD.mdb" 

    ''Create Link... 
    Set cn = CreateObject("ADODB.Connection") 
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
      "Data Source=" & strMDB & ";" & _ 
      "Persist Security Info=False" 

    Set ct = CreateObject("ADOX.Catalog") 
    Set ct.ActiveConnection = cn 

    Set tbl = CreateObject("ADOX.Table") 
    Set tbl.ParentCatalog = ct 


    ''Link Excel using named range 
    Set tbl = CreateObject("ADOX.Table") 
    Set tbl.ParentCatalog = ct 

    With tbl 
    .Name = "LinkTableXLRange" 
    .properties("Jet OLEDB:Link Provider String") = "Excel 8.0;DATABASE=" _ 
     & strLinkXL & ";HDR=Yes" 
    ''The named range 
    .properties("Jet OLEDB:Remote Table Name") = "Data_Range" 
    .properties("Jet OLEDB:Create Link") = True 
    End With 

    ''Append the table to the tables collection 
    ct.Tables.Append tbl 
    Set tbl = Nothing 

    ''Link Excel by sheet name 
    Set tbl = CreateObject("ADOX.Table") 
    Set tbl.ParentCatalog = ct 

    With tbl 
    .Name = "LinkTableXLSheet" 
    .properties("Jet OLEDB:Link Provider String") = "Excel 8.0;DATABASE=" _ 
      & strLinkXL & ";HDR=Yes" 
    ''Note the use of $, it is necessary 
    .properties("Jet OLEDB:Remote Table Name") = "Sheet2$" 
    .properties("Jet OLEDB:Create Link") = True 
    End With 

    ''Append the table to the tables collection 
    ct.Tables.Append tbl 
    Set tbl = Nothing 

De: http://wiki.lessthandot.com/index.php/Linking_Tables_via_Jet_and_ADO