回答受付が終了しました

VBAを使ったaccessとExcelの連携について教えてください。 VBAのユーザーフォームで、accessデータベースを更新できるボタンを設置したいです。

VBAを使ったaccessとExcelの連携について教えてください。 VBAのユーザーフォームで、accessデータベースを更新できるボタンを設置したいです。 更新する内容は、実行するマクロbookの、データというsheetに記載のある項目になります。 A列に日付が2020/09/20という形式で入っていて、日付で選択した範囲のデーターをaccessにアップしたいです。 ※日付ボタンの記述もお願いいたします。 アップする内容は、ExcelA列~P列と、AJ列になります。 動作は、ExcelデータC列のID=accessデータB列codeが、ユニークで紐づけられるので、これを基準に、 ・ID一致箇所があれば、更新されている内容をaccessデータに上書き ・IDが一致しなければ、新規登録扱いとし、accessデータに新規追加 を、行いたいです。 Excelパス D:\one drive\OneDrive\デスクトップ\Excelフォルダー Excelbook名 テスト.xlsm accessパス W:\net\accessフォルダー (195.167.0.10)serverになります。 accessデータファイル名 テスト.accdb お手数をお掛けいたしますが、宜しくお願いいたします。

Microsoft Access | Visual Basic56閲覧xmlns="http://www.w3.org/2000/svg">100

回答(2件)

0

sqlでかくなら update tbl inner join [text;database=フォルダ].[ベース名.拡張子] as csv on tbl.id=csv.id set tbl.フィールド=csv.フィールド; insert into tbl select csv.* from [text;database=フォルダ].[ベース名.拡張子] as csv left join tbl on csv.id=tbl,.id where tbl.id is null;

ご連絡ありがとうございます。 >>text;database=フォルダ].[ベース名.拡張子] 上記ですが、ここはaccessのパスを指定すればよいでしょうか? C:\~からの記述で良いでしょうか? Excelにする場合、CSVをxlsmに変えれば良いでしょうか? >> set tbl.フィールド=csv.フィールド; 上記ですが、Excelとaccessの共通している紐づけIDを指定すればよいでしょうか? SQLということは、accessに記述して、accessからExcelにとりに行くという事であっていますでしょうか? 質問が多くすみません。

0

こんにちは。 エクセルvbaから、データの更新をするのですから、 パソコンにはadodbのデータ接続環境をインストールしてあること adoでのデータ処理のサイトで、接続の方法とSQLによって「更新データの選択」を開き、for nextによってレコードをアップデートするながれを確認してください アクセスのファイルを、単なるdbのテーブル扱い、ということになります。 >・ID一致箇所があれば、更新されている内容をaccessデータに上書き >・IDが一致しなければ、新規登録扱いとし、accessデータに新規追加 ここですが、アクセスのデータで、IDの列だけをエクセルシートに読み込みさせても、問題なくできるようであれば、 1) アクセスからIDだけを全部読み込み。 2) エクセルデータに、match関数である、なしの判定をさせる。 3) エクセルのデータを反映させるループでは、 match関数の結果を使い、更新の場合は、更新モードでSELECTしてから updateをする。 新規の場合、更新モードのオープンのあとaddnewで1レコードを追加更新、閉じる というループになります。 IDを読み込みしないで、というのでしたら、 1) IDを指定してselectオープンして、eofなのかを判定し、 eofでなかったら、レコードの更新、eofだったら、 addnewをして、レコードの更新する、という流れとなります。 idが「インデックスを作成している」というようにデータベースができていたら、時間は大差ありませんが、もし、インデックスがない場合、時間はかかるようになります。 まずは、エクセルがadoでデータ接続する部分までができるようになるか、確認してください。

それから、VBAで行いたい、<===ですが、 エクセルVBAとアクセスVBAがあるのですよ。 どっちともとれる質問になっているので、明確にしてください