[[20240402193057]] 『「ユーザー定義型は定義されていません」が出る原』(Noritika) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『「ユーザー定義型は定義されていません」が出る原因』(Noritika)

「ユーザー定義型は定義されていません」このエラーメッセージが
出る原因が分からず困っています。

発生する時の状況
・セルに何かを入力してエンター押した後に発生する。
 (セルに何かを入力してエンターを押したら毎回エラーが発生するわけではなく、
稀に発生するといった感じです。)
・発生するファイル(何かを入力してエンターを押したファイル)は不特定
・発生する時、必ず開いているファイルは個人用マクロブック

エラーメッセージが発生するタイミング的にWorksheetChangeイベントが
絡んでるのかとも思ったのですが、開いてるファイルの中に
WorksheetChangeイベントを使っているファイルが一切ない時でも発生するので
全く見当がつかず... 原因としては何が考えられるでしょうか。
ご回答よろしくお願いいたします。

個人用マクロブックのThisWorkbookモジュールに記述しているコードです
Option Explicit
Private WithEvents appXL As Application

Private Sub Workbook_Open()
Set appXL = Application
End Sub

Private Sub appXL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)

Debug.Print Wb.Name

If Wb.Name = "AAAA" Then

 Call hogehogeProject.メインモジュール.メインモジュール
 '個人用マクロブックからhogehogeProjectを参照設定しています

End If
End Sub

< 使用 Excel:Excel2021、使用 OS:Windows10 >


見づらいので掲示のお手伝い。
 Option Explicit
 Private WithEvents appXL As Application

 Private Sub Workbook_Open()
    Set appXL = Application
 End Sub

 Private Sub appXL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    Debug.Print Wb.Name
    If Wb.Name = "AAAA" Then
       Call hogehogeProject.メインモジュール.メインモジュール
       '個人用マクロブックからhogehogeProjectを参照設定しています
    End If
 End Sub

して、エラーが発生するときは、どの行で止まっているのでしょうか?

(もこな2 ) 2024/04/03(水) 09:12:25


見やすい形にしていただきありがとうございます。

どの行で止まっているのかについてですが、通常でしたら
エラーが起きてる箇所が反転するか背景色が変わりますが、それがなく
警告アイコンのメッセージボックスに「ユーザー定義型は定義されていません」
というメッセージが出るのみです。

メッセージが出る際、VBEを開いてる場合はVBEが最前面になります。
プロジェクトは何かを入力する前に開いていたプロジェクトのままで、
ローカルウィンドウには何も表示されません。

それと、エラーの発生を再現できるようになりました。

1.質問のエラー以外の、コンパイルエラーまたは実行時エラーが起きる
2.どこかのブックに何かを入力する
3.「ユーザー定義型は定義されていません」のエラーメッセージが出る
4.手順1のエラーが起きてる箇所を切り取り、同じ個所に張り付けて再度実行する。
  もしくは、新規のモジュールを作成しエラーが起きたプロシージャーごと
新規のモジュールにコピペして、コピペしたプロシージャーを実行する
5.「ユーザー定義型は定義されていません」のエラーメッセージが出る

上記の操作をすると、毎回「ユーザー定義型は定義されていません」のエラーメッセージが出ます。
1.の後は中断ボタン押す前、押した後いずれでもエラーメッセージが出ます。

エラーが発生している箇所がプロシージャ名含め明示されない所も原因が分かりずらい所なのですが、
何が原因となっているか分かりますでしょうか。
(Noritika) 2024/04/04(木) 04:29:37


 原因はわかりませんが、こんな風にしてみたら追加情報が得られるかもしれません。
 トライしてみて下さい。

 VBEの「Option」 - 「全般」 - エラートラップ で
 1.「エラー発生時に中断」
 を一時的に指定してみてください。
 そうすれば、エラーが発生した行で止まるはずです。
 どこでエラーが発生するか確認してみて下さい。

(xyz) 2024/04/04(木) 09:46:19


ご回答ありがとうございます。

エラートラップを「エラー発生時に中断」にしてみましたが、
それでもエラー発生行は表示されませんでした。

それと、訂正で
(誤) If Wb.Name = "AAAA" Then
(正) If Wb.Name = "AAAA.xlsm" Then
大変失礼いたしました。
(Noritika) 2024/04/05(金) 07:24:04


現状はわかりませんが、↓が気になります。
>コンパイルエラーまたは実行時エラーが起きる
「実行時エラー」は、少なくとも実行できており、途中でエラーが発生していますが、「コンパイルエラー」は、(構文として正しくないので)実行できていません。
なのでまずは、そこの区別を付けるべきじゃないかとおもいました。

また、タイミングとして「appXL_WorkbookBeforeClose」に問題があるように思えないので、思いきって一旦そのプロシージャ全体をコメントアウトして無効化してから、同じ手順で障害が発生するか確認して原因特定するのも有効であるように思います。(試してないので思うだけですが)

あと↓は、書き間違えですよね?

 Call hogehogeProject.メインモジュール.メインモジュール

(もこな2 ) 2024/04/05(金) 08:55:48


失礼。「個人用マクロブックからhogehogeProjectを参照設定しています」ですから、あながち間違いでもないのですかね?そちらは詳しくないので別の回答者さんのコメントを参考にしてください。
 Call hogehogeProject.メインモジュール.メインモジュール
                                       ~~~~~~↑~~~~~~~~
                           さすがにこいつは間違いだとおもいますが。

ちなみに↓のようにRunメソッドに変えてみるのはどうでしょうか?

 Private Sub appXL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    Debug.Print Wb.Name
    If Wb.Name = "AAAA.xlsm" Then
        Application.Run "AAAA.xlsm!プロシージャ名"
    End If
 End Sub

(もこな2 ) 2024/04/05(金) 12:50:22


 個人用マクロブックと利用しているアドインを順に解除して
 エラーの再現を試して、どのプロジェクトでエラーが発生しているかを探る

 時間はかかると思いますが、地道にテストするしかないでしょう
(´・ω・`) 2024/04/05(金) 15:48:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.