エクセルのブックをアクセスに取り込む

まあ、そんなわけで最近は accessvba とかさわってるんですが、JScriptC# とかで書けるようにはならんもんですかね。最初から dbms として access を見て C# で全部かけって?

というわけで、エクセルのブックに1シート1テーブル形式で保持されている内容をアクセスに取り込むような作業をやってみた。

TransferSpreadsheetかOLE Automation
TransferSpreadsheetならExcelいらずだし色々自動化してくれる
シートの一覧ってどうやって取るの?
無理ぽ、Excel をオートメーションで使うとか、Excel のファイルを扱えるライブラリを使う
フィールド名
フィールドの名前はシートの1行目で指定して、引数 HasFieldNames を True にする
フィールドの型
各列の最初のデータから自動判定。HasFieldNames が True なら2行目の内容次第ってこと
シートを指定したいんだけど
引数 Range に範囲指定
具体的には?
Sheet1全体から取り込むなら "Sheet1!" と最後に ! をつける。web 上ではシート名だけでいいとか、OLE Automation で目的のシートを Select で選択しておかないとダメとかあるけど*1、 ! をつけてシート全体を指定するだけですべて OK。
"Sheet1!" でインポートしたら "Sheet1$" が見つからないってエラーでるんだけど?
指定したシートが存在しないと、勝手に $ に変換されるみたい。つまり、シート名のスペルミス。実はシート名が "Sheet1 " だったとか、よくあること
TransferSpreadsheetで作ったテーブルが存在しないってエラーになる
TransferSpreadsheet の実行後、TableDef.Refresh しないと VBA からは発見できないよ(より上位の階層をRefreshしてもよい)
TransferSpreadsheetで追加インポートしたデータがフォームで表示されないよ
Requery

情報に困ったら英語のQnAを読め。帳票関連だけは日本の帳票文化依存の部分があるので日本語の情報もみたほうがいい、ってかんじですね。

*1:シート名が間違ってると選択されているシートが対象になるので、そのあたりから来た誤情報かな