Microsoft Access 掲示板

実行時エラー13 型が一致しません

12 コメント
190 views
4 フォロー

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

mk
作成: 2025/03/10 (月) 21:06:57
通報 ...
1

提示のコードを実行してみましたが問題なく実行できました。
エラーが出たときどのコードが反転表示されてますか。

また、どのフォームを開いているときでもエラーになりますか。それとも特定のフォームの時だけですか。

2

そもそも、提示のコードは開いているフォームのプロパティを列挙するものですが、
プロパティは大量にあるので、Debug.Printでイミディエイトウィンドウに出力しても、
イミディエイトの表示上限を超えて全てを表示することはできないと思いますので、
あまり意味のないコードだと思いますが、
最終目的は何でしょうか。

3

回答ありがとうございます。
目的はバージョン管理をしたく、各オブジェクトのプロパティにバージョン情報をセットしたいです。
以下参考urlです。本来はこちらのプロパティ設定のプログラムで検証しておりましたが、
prpの部分で型エラーとなり、提示したシンプルなサンプルプログラム同様にprpの部分でエラーが発生したことから、
確認させて頂きました。

https://hatenachips.blog.fc2.com/blog-entry-466.html

どのフォームでも「実行時エラー’13’ 型が一致しません。」が表示されます。
エラー箇所は以下で、黄色く反転されます。
For Each prp In frm.Properties

以上よろしくお願いいたします。

4

参考urlは私のブログですが、
そちらのコードを実行してみましたが、エラーなく説明プロパティの設定、取得ができました。

ちょっと原因が想像つかないですね。

とりあえず適当なフォームを開いておいて、下記のコードを実行するとどうなりますか。

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
    Next frm
End Sub
5

どのフォームでも「実行時エラー’13’ 型が一致しません。」が表示されます。
エラー箇所は以下で、黄色く反転されます。
For Each prp In frm.Properties

Dim frm As Form, prp As Property

変数 prp を Object 型または Variant 型として宣言しても
同様の結果となるのでしょうか。

6

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

7

sk様のご指摘のprpをObject型にすることで実行できました。
ありがとうございました。
propatyだと型エラーとなる原因分かりますでしょうか。

9

prpをObject型にすることで実行できました。

では今度は、変数 prp を次のように宣言した上で
AllOpenForms プロシージャを実行してみたら
どのような結果になるかを確認してください。

    Dim frm As Form, prp As DAO.Property
10

現時点での見立てでは、恐らくこういうことなのではないかと。

画像1
画像2

11

なるほど、そういうことか。
参照設定を前者の画像のようにしたら私の環境でも再現しました。
VBA Extensibility を ADE の上におくと、VBIDEのPropertyを参照してしまうということですね。

8

当方の環境ではエラーなく実行できるし、同様の報告を今まで見たことがないので、mkさんの環境依存の問題のようです。

Object型にすることで実行できたということは、Propertyというキーワードが別のものに関連付けられている印象ですね。

新規ファイルを作成してそこで実行してみてうまく行くなら、ファイル破損が原因ということになります。
それでもエラーになるなら、Accessのアンインストール、再インストールを試してみるとかでしょうか。

それでもだめなら、Object型にすることで対処することになるでしょう。

12

原因は参照設定だったのですね。
ありがとうございました。
環境の問題とは思っておりましたが、具体的にご説明頂き納得しました。
今後もよろしくお願いいたします。