はVBA

2017-09-22 8 views
2

とAccessで複数のリンクテーブルを作成するだから私は現在、このコードはVBA

Public Sub DoTrans() 

    Set cn = CreateObject("ADODB.Connection") 

    dbPath = Application.ActiveWorkbook.Path & "\db1.accdb" 
    dbWb = Application.ActiveWorkbook.FullName 
    dbWs = Application.ActiveSheet.Name 

    scn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbPath 
    dsh = "[" & Application.ActiveSheet.Name & "$]" & "namedrange1" 

    cn.Open scn 
    ssql = "INSERT INTO Table1 ([fdName], [fdOne], [fdTwo]) " 
    ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh 

    cn.Execute ssql 

End Sub 

を持っている。しかし、これは、既存のAccessテーブルに挿入します。私は、すべての名前付き範囲がAccessのテーブルに変換されるように、Excelで持っている名前付き範囲のリストに基づいて、リンクテーブルを作成するためにこれを変更できるようにしたいと思います。書式設定は問題ではありません。なぜなら、Accessのテーブルとして使用できる名前の範囲のフォーマットがわかっているからです。

これを簡単に行う方法はありますか?

+0

TransferSpreadsheetメソッドを試しましたか? – June7

答えて

2

INSERT INTO既存テーブルに追加すると、SELECT .... INTOが新しいテーブルを作成します。あなたはSELECT INTOへの問合せをリライトしたい場合

、それはこのような単純なものになります。あなたはそれを上書きしたい場合は、最初のテーブルを削除する必要が

ssql = "SELECT * INTO Table1 " 
ssql = ssql & "FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh 

注意。

ご質問にはいくつかの副題があります。私は特定の列でADOのリンクを作成することができますが、あなたは試行を示していないし、適切な答えを書くのに十分な情報を共有していません。

2

TransferSpreadsheetメソッドについて詳しく説明するサンプルは:

Dim sNT as String, sWB as String, sRN as String
sNT = "Table1"
sWB = "C:\MyWorkBook.xls"
sRN = "namedrange1"
DoCmd.TransferSpreadSheet acLink, , sNT, sWB, True, sRN

これは、MS-アクセスモジュールで実行されなければなりません。

+0

良い例ですが、この例では 'sNT =" Table1 "'のように空白を記入してください(例: 'sNT =" Table1 "'、これは 'Table1'です) Access.Application'オブジェクト(例: 'Dim accApp As New Access.Application
accApp.OpenCurrentDb dbPath
accApp.DoCmd.TransferSpreadSheet')。これは、Microsoft Access xx.0オブジェクトライブラリへの参照を必要とします。 –

+1

あなたのコメントをありがとう、投稿を編集しました!そして私は本当にaccApp-trick ;-)について忘れました – JonRo