質問するログイン新規登録
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

686閲覧

文字列型のフィールドを挿入したい

u_zu

総合スコア53

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2024/06/30 08:13

編集2024/06/30 11:50

0

0

実現したいこと

EXCELでレコードセットを新規に作成しようとしています。
文字列型のフィールドを作成したいのですが、何故かエラーになってしまいます。
理由が分からないので、知見をください。

前提

EXCELの標準モジュールでコードを書いています。

発生している問題・エラーメッセージ

実行時エラー 3001
エラーメッセージ
引数が間違った型、許容範囲外、または競合しています。

該当のソースコード

VBA

ソースコード

Sub Test1() 'Microsoft ActiveX Data Objects6.1 Library参照設定済 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset With rs With .Fields .Append "ID", adVarChar    ’ここでエラー .Append "Name", adVarChar  ’ここでもエラー .Append "Score", adInteger End With .Open .AddNew !ID = "001" !Name = "一郎" !Score = 50 .Update End With Cells(1, 1).CopyFromRecordset rs rs.Close: Set rs = Nothing End Sub ### 試したこと .Append "ID", adVarChar  の箇所でエラーになります。 インテリセンスで選択したのですが、何がいけないのかわかりません。 ちなみに[adChar] を選択しても同じエラーになりました。 [adVariant](Variant型?)を選択すればうまくいくのですが。。。 ### 補足情報(FW/ツールのバージョンなど) Office 365 よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2024/06/30 13:12

DBのOPENはしていますか?
u_zu

2024/06/30 21:12

saziさん  DBのOPENはしていません。 今回 新たに設定したので、DBは存在していない、という認識です。 adVarChar の代わりに adVariant を設定すればうまくいくので、DBのOPENは 今回の問題点では ない、というように思っていました。
sazi

2024/07/01 00:02

保存先のaccessに対するconnection(接続情報)を指定してDBをopenする事で、当該のデータに保存が出来ます。
hatena19

2024/07/01 02:09

saziさん データベースに接続せずにメモリ上でレコードセットを生成して操作するということは可能です。 kanaMind: Memory上でRecordsetを使用する https://kanamind.blogspot.com/2011/10/memoryrecordset.html ただ、エクセルでデータ操作(フィルター、ソートなど)は可能なので、わさわざインメモリレコードセットを使う必然性は疑問です。 そのため情報はすくないですね。
sazi

2024/07/01 10:01

hatena19さん> 成程。ありがとうございます。 data tableのような使い方をしているという事ですね。 タグにAccessがあったのでてっきりAccessに保存しているものとばかり思っていました。
guest

回答1

0

ベストアンサー

テキスト型のフィールドはサイズ(DefinedSize引数)を設定する必要があるようです。
下記のコードで問題なく動作するのを確認しました。

vba

1 With .Fields 2 3 .Append "ID", adVarChar, 255 4 .Append "Name", adVarChar, 255 5 .Append "Score", adInteger 6 7 End With 8

投稿2024/06/30 14:45

hatena19

総合スコア34367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u_zu

2024/06/30 21:23

hatena19さん ありがとうございます。 >テキスト型のフィールドはサイズ(DefinedSize引数)を設定する必要があるようです。 というような情報はどこで(どのようなサイトで)分かるのでしょうか? ネットを見ても分からなかったので。。。教えてください。 また、「Append "ID", 」と入力した後に表示される、インテリセンスを見ると、 Type As DataTypeEnum の後ろは[]で囲われている項目のようです。 これを見て、引数が必須項目ではない、と思っていました。
hatena19

2024/07/01 02:00 編集

https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/append-method-ado 上記の公式ドキュメントでも省略可能とはなっています。 ただ、経験上、公式ドキュメントでもたまに間違いがあるし、英語から翻訳する場合に誤訳もあります。 ということで、ドキュメント通りでもエラーが出る場合はけっこうあります。 実際に試してみて、エラーがでずに実行できたという情報提供です。そのため「あるようです。」と言葉を濁しています。 Accessでテーブルのフィールドをデザインビューで設定するとき、フィールドサイズの設定を省略するとことができないということから設定する必要があるのではと思い、実際に試してみた結果です。
u_zu

2024/07/01 11:49

hatena19さん ありがとうございます。 参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問