himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

データベース変換

マクロアクションの"データベース変換"も DoCmd.TransferDatabase も呼んでる API は同じだけど、VBA の環境では VBA が式を評価するので、引数に変数やユーザー関数やコントロール参照が指定できる。

DoCmd.TransferDatabase の第一引数でインポート|エクスポート|リンクを選択するけど、この値はシステム定数なので、VBA Editor のオブジェクトブラウザで知ることができる。しかし一般人にマクロを作ってもらうときにいちいちシステム定数を認識させるのは嫌がられるだろうから、"import"|"export"|"link" で指定できるようにしたのがミソといえばミソ。
それさえ判っていれば、あとはファイルパスと、読み書きするテーブル名を指定するだけ。

Function doCmdTransferDB(mode As String, fPath As String, sTbl As String, dTbl As String)
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
    myDic.Add "import", acImport
    myDic.Add "export", acExport
    myDic.Add "link", acLink
    On Error GoTo ErrorHandle
    'Debug.Print "passed:doCmdTransferDB:" & mode; ""
    DoCmd.TransferDatabase myDic.Item(mode), _
                            "Microsoft Access", _
                            fPath, _
                            acTable, _
                            sTbl, _
                            dTbl
    doCmdTransferDB = True
    'Debug.Print "passed:successfull"
GoOut:
    Exit Function
ErrorHandle:
    MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description
    doCmdTransferDB = False
    GoTo GoOut
End Function