Access2019を利用している者です。
vbaでプロパティを取得、設定するプログラムを構築中です。
あるサイトに以下サンプルプログラムがあり、
call AllOpenForms()
と実行すると「実行時エラー13 型が一致しません」が
発生します。原因を教えてください。
Sub AllOpenForms()
Dim frm As Form, prp As Property
' Enumerate Forms collection.
For Each frm In Forms
' Print name of form.
Debug.Print frm.Name
' Enumerate Properties collection of each form.
For Each prp In frm.Properties
' Print name of each property.
Debug.Print prp.Name; " = "; prp.Value
Next prp
Next frm
End Sub
提示のコードを実行してみましたが問題なく実行できました。
エラーが出たときどのコードが反転表示されてますか。
また、どのフォームを開いているときでもエラーになりますか。それとも特定のフォームの時だけですか。
そもそも、提示のコードは開いているフォームのプロパティを列挙するものですが、
プロパティは大量にあるので、Debug.Printでイミディエイトウィンドウに出力しても、
イミディエイトの表示上限を超えて全てを表示することはできないと思いますので、
あまり意味のないコードだと思いますが、
最終目的は何でしょうか。
回答ありがとうございます。
目的はバージョン管理をしたく、各オブジェクトのプロパティにバージョン情報をセットしたいです。
以下参考urlです。本来はこちらのプロパティ設定のプログラムで検証しておりましたが、
prpの部分で型エラーとなり、提示したシンプルなサンプルプログラム同様にprpの部分でエラーが発生したことから、
確認させて頂きました。
https://hatenachips.blog.fc2.com/blog-entry-466.html
どのフォームでも「実行時エラー’13’ 型が一致しません。」が表示されます。
エラー箇所は以下で、黄色く反転されます。
For Each prp In frm.Properties
以上よろしくお願いいたします。
参考urlは私のブログですが、
そちらのコードを実行してみましたが、エラーなく説明プロパティの設定、取得ができました。
ちょっと原因が想像つかないですね。
とりあえず適当なフォームを開いておいて、下記のコードを実行するとどうなりますか。
変数 prp を Object 型または Variant 型として宣言しても
同様の結果となるのでしょうか。
hatena様のAllopenForms()を実行したところ、エラーなく実行できました。
原因はprpを利用していないからだと思います。
以下の通り、For Each prp In frm.Properties から以下3行を追加し、実行したところ、
For Each prp In frm.Properties にて「実行時エラー’13’ 型が一致しません。」が表示されました。
prpの使い方が分かっておらずfrmのように扱うことができないのでしょうか。
Sub AllOpenForms()
Dim frm As Form, prp As Property
' Enumerate Forms collection.
For Each frm In Forms
' Print name of form.
Debug.Print frm.Name
Debug.Print frm.Properties.Count
Debug.Print frm.Properties(0).Name
Debug.Print frm.Properties(0).value
For Each prp In frm.Properties
Debug.Print prp.Name
Next prp
Next frm
End Sub
sk様のご指摘のprpをObject型にすることで実行できました。
ありがとうございました。
propatyだと型エラーとなる原因分かりますでしょうか。
では今度は、変数 prp を次のように宣言した上で
AllOpenForms プロシージャを実行してみたら
どのような結果になるかを確認してください。
現時点での見立てでは、恐らくこういうことなのではないかと。
なるほど、そういうことか。
参照設定を前者の画像のようにしたら私の環境でも再現しました。
VBA Extensibility を ADE の上におくと、VBIDEのPropertyを参照してしまうということですね。
当方の環境ではエラーなく実行できるし、同様の報告を今まで見たことがないので、mkさんの環境依存の問題のようです。
Object型にすることで実行できたということは、Propertyというキーワードが別のものに関連付けられている印象ですね。
新規ファイルを作成してそこで実行してみてうまく行くなら、ファイル破損が原因ということになります。
それでもエラーになるなら、Accessのアンインストール、再インストールを試してみるとかでしょうか。
それでもだめなら、Object型にすることで対処することになるでしょう。
原因は参照設定だったのですね。
ありがとうございました。
環境の問題とは思っておりましたが、具体的にご説明頂き納得しました。
今後もよろしくお願いいたします。