最新トピック
8
25 日前
Hatena様にご質問 25 日前
1
2 ヶ月前
排他制御 2 ヶ月前
6
5 ヶ月前
モジュールでカレントフォームのコントロールを使うには 5 ヶ月前
7
6 ヶ月前
日付のテキストボックスからフォームが開けません 6 ヶ月前
9
6 ヶ月前
レポートにおける数値の間隔を広げる方法 6 ヶ月前
12
6 ヶ月前
リストボックスから複数選択しそれをテーブルに格納したい 6 ヶ月前
タグリスト
Markdown テーブル生成
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
この
For Next内でDataプロシージャをCallしているということでよすね。この
For Next内で何をしているか知りたいのです。というのは、
まずはその予想があっているのかどうか、
VBAはシングルタスクなのでVBAの標準のコマンドならそのようなことは通常はおこらないはず、外部コマンドを使っているか、なにか特別なことをしているのか、
その辺を確認したいのです。
追加に失敗したら、追加されるまで処理を繰り返すというのは対症療法的な解決法です。できれば、根本の原因を特定して、そちらで解決できる方法がないかさぐるのが先決だと考えます。
その解決法がどうしてもないのなら、次善策として対症療法的解決法をとるというようにすべきと考えます。
とりあえず現状のコードで修正したほうかいいと思われるところを指摘しておきます。
シートをActivateしてアクティブなシートを対象に処理をしていますが、アクティブシートを前提にするとバグのもとになります。
シートを変数に格納してそれを対象にするか、With ステートメントで明示的に対象シートを指定するほうが確実、安全なコードになります。
次に、下記のコードについて
Functionの戻り値を Recordset にしてますが、
INSERT INTO文は Recordset を返しません。テーブルへのデータを追加するだけです。Function内で戻り値も設定していないので無意味なものになっています。
また、この関数内で、
Set adoCn = CreateObject("ADODB.Connection")とADODBコネクションを生成してますが、
Closeしてません。使用後は明示的にCloseすべきです。
さらに、100件くらいのレコードを追加する場合、
100回ADODBコネクションを生成することになりますが、
無駄なことです。
100件のレコードを追加するなら、コネクションを最初に1回生成してOpenして、
続けて100回追加して、最後にCloseするという処理にすると効率的です。