Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2824 / 13646 ツリー ←次へ | 前へ→

【65748】ユーザー定義型は定義されていません REV 10/6/25(金) 0:52 質問[未読]
【65752】Re:ユーザー定義型は定義されていません かみちゃん 10/6/25(金) 8:37 発言[未読]
【65755】Re:ユーザー定義型は定義されていません REV 10/6/25(金) 9:37 発言[未読]
【65753】Re:ユーザー定義型は定義されていません neptune 10/6/25(金) 9:15 発言[未読]
【65756】Re:ユーザー定義型は定義されていません REV 10/6/25(金) 9:44 発言[未読]
【65758】Re:ユーザー定義型は定義されていません REV 10/6/25(金) 11:45 発言[未読]
【65759】Re:ユーザー定義型は定義されていません 247b 10/6/25(金) 13:53 発言[未読]
【65773】Re:ユーザー定義型は定義されていません REV 10/6/27(日) 2:41 お礼[未読]
【65761】Re:ユーザー定義型は定義されていません neptune 10/6/25(金) 15:10 発言[未読]
【65775】Re:ユーザー定義型は定義されていません REV 10/6/27(日) 3:39 お礼[未読]

【65748】ユーザー定義型は定義されていません
質問  REV  - 10/6/25(金) 0:52 -

引用なし
パスワード
   既出でしたらすみません・・・
(自分なりには調べたのですが^^;)

[ 症状 ]
マクロの実行を中断し
エクセルの操作をすると
まれに、[ユーザー定義型は定義されていません]と
メッセージが表示されます。

こんな症状なのですが、
毎回メッセージが出るわけではないのです・・・
結局、どんな状況が重なれば発生するかも分からず
解決方法も分からずで困っています;;

それと確かではないのですが、
モードレスでフォームを開いているときにも
同じ症状が出た様な気がします。
(それ以来、モードレスは使っていないのでなんとも・・・)

環境の問題も関係してそうなので出しておきます。
Windows XP Pro Ver.2002 SP3
Excell 2003 (11.8324.8324) SP3
Visual Basic 6.5

[参照設定](調べた時に参照設定の話も出ていたので)
Visual Basic For Applications
Microsoft Excel 11.0 Object Library
OLE Automation
Microsoft Office 11.0 Object Library
Microsoft Forms 2.0 Object Library
Ref Edit Controls
Microsoft ActiveX Data Objects 2.8 Library
Microsoft DAO 3.6 Object Library
Microsoft Scripting Runtime
以上がチェック済みになっています。
優先順位は表記順通りです。

更新は随時行っているので最新(だと思います^^;)
Microsoft Scripting Runtimeは
調べた際に入れておいた方がよさそうだったので
意味も知らずに入れました
ちなみに症状に変化なし;;

そのほか出しておいた方がよさそうな
環境情報があれば,直接の解決方法じゃなくても
コメントして頂けると助かります。

モードレス使用禁止の世界では
淋し過ぎるので、どなたかご協力をお願いします。

【65752】Re:ユーザー定義型は定義されていません
発言  かみちゃん  - 10/6/25(金) 8:37 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>まれに、[ユーザー定義型は定義されていません]と
>メッセージが表示されます。

どのようなコードで、そのメッセージが出るのか提示されてはいかがですか?

【65753】Re:ユーザー定義型は定義されていません
発言  neptune  - 10/6/25(金) 9:15 -

引用なし
パスワード
   ▼REV さん:
取り敢えず気付いた点だけ。
>環境の問題も関係してそうなので出しておきます。
>Windows XP Pro Ver.2002 SP3
>Excell 2003 (11.8324.8324) SP3
>Visual Basic 6.5
>
>[参照設定](調べた時に参照設定の話も出ていたので)

>Ref Edit Controls
これを使うのをやめましょう。今回の現象と関係あるかどうかは
分かりませんが、色んな不具合があります。
userform,textboxで代用できたと思います。
昔作った事ありますが、難しくはないのですが面倒くさかった記憶があります。
面倒であれば、inputboxを使うとか。

>Microsoft ActiveX Data Objects 2.8 Library
>Microsoft DAO 3.6 Object Library
ADOとDAOの2つのデータオブジェクトを参照設定する必要はないはずです。
どちらかにしましょう。(2つ付けてもそれなりのコードを書けば
問題はないとはは思うが必要ないものを参照する必要もないし、ややこしい。)

>Microsoft Scripting Runtime
>以上がチェック済みになっています。
>優先順位は表記順通りです。
>
>更新は随時行っているので最新(だと思います^^;)
>Microsoft Scripting Runtimeは
>調べた際に入れておいた方がよさそうだったので
>意味も知らずに入れました
それは・・・・問題外でしょ^ ^;
調べて不要ならはずしましょう。

・Option Explicitは入れてますか?

現時点ではここまでしか言えません。

【65755】Re:ユーザー定義型は定義されていません
発言  REV  - 10/6/25(金) 9:37 -

引用なし
パスワード
   ▼かみちゃん さん:
>
>どのようなコードで、そのメッセージが出るのか提示されてはいかがですか?

まんまコードを出すことができないので
色々やってメッセージのでる条件を作ってみました。

Sub test111()

Dim i As Integer

i = 1 / 0

End Sub

[ 手順 ]
1.とりあえず実行しエラーを出す。
2.デバッグを選択
3.中断状態をツールバーの停止ボタンで停止させる
4.エクセルに戻り適当なセルを選択
5.(好きな文字でいいのかなぁ?)1111を入力(半角英数)
6.Enterキーを押した時点でメッセージ発生

【65756】Re:ユーザー定義型は定義されていません
発言  REV  - 10/6/25(金) 9:44 -

引用なし
パスワード
   ▼neptune さん:

>>Ref Edit Controls
>これを使うのをやめましょう。今回の現象と関係あるかどうかは
>分かりませんが、色んな不具合があります。

>ADOとDAOの2つのデータオブジェクトを参照設定する必要はないはずです。
>どちらかにしましょう。(2つ付けてもそれなりのコードを書けば
>問題はないとはは思うが必要ないものを参照する必要もないし、ややこしい。)

>>Microsoft Scripting Runtime

>調べて不要ならはずしましょう。

提案ありがとうございます。

上記内容を設定して何回か試して
報告させてもらいます。

あ、Option Explicit入れてます。

【65758】Re:ユーザー定義型は定義されていません
発言  REV  - 10/6/25(金) 11:45 -

引用なし
パスワード
   ▼neptune さん:
>取り敢えず気付いた点だけ。

>>Ref Edit Controls
>これを使うのをやめましょう。今回の現象と関係あるかどうかは
>分かりませんが、色んな不具合があります。
>userform,textboxで代用できたと思います。
>昔作った事ありますが、難しくはないのですが面倒くさかった記憶があります。
>面倒であれば、inputboxを使うとか。
>
>>Microsoft ActiveX Data Objects 2.8 Library
>>Microsoft DAO 3.6 Object Library
>ADOとDAOの2つのデータオブジェクトを参照設定する必要はないはずです。
>どちらかにしましょう。(2つ付けてもそれなりのコードを書けば
>問題はないとはは思うが必要ないものを参照する必要もないし、ややこしい。)
>

>それは・・・・問題外でしょ^ ^;
>調べて不要ならはずしましょう。
>
>・Option Explicitは入れてますか?
>

頂いたコメントを元に色々と検証してみました

とりあえず必要なのはDAOのみなので
他をはずして動かしてみました

[参照設定]
Visual Basic For Application
Microsoft Excel 11.0 Object Library
OLE Automation
Microsoft Office 11.0 Object Library
Microsoft Forms 2.0 Object Library
Microsoft DAO 3.6 Object Library
以上が設定してある状態で

Sub test111()

Dim i As Integer

i = 1 / 0

End Sub
このプロシージャを実行し中断状態で
適当なセルに1111を入力してコメントは出ませんでした。

ですが・・・エラーの原因が気になってしまい
(Refが問題だろうと思いながらw)
DAO + ADO で試しコメントなし
ADO + Ref でコメント発生
DAO + Ref でコメント発生
ADO のみ でコメント発生・・・あれ?
DAO のみ でコメント発生;;

他で新規にブックを作成し
同じ検証をしてみたところ
どれもコメント発生なし

検証にならないので引き続き既存ブックで検証

(このあと試行錯誤しているうちに)

VBEにてユーザーフォームを開いている状態で
上記の手順を実行するとコメントが出ることが分かりました

コメントなし→コメント発生に変わったタイミングは
Refを参照設定にいれるため
フォームを開き、そのままにした事が原因かと思います。

[開いているユーザーフォームについて]
・どのユーザーフォームでも発生
 (過去にRefコントロールを配置したフォームに関わらず)

・ユーザーフォームを実行しているわけではなく
 VBEにてフォームの編集ウィンドウを
 バックグラウンドに置いた状態でマクロの実行

この時点で検証を断念しました。。。

[参照設定を変えてみた効果]
以前は

マクロの実行 → デバッグ → 中断状態でセルに入力
マクロの実行 → デバッグ → 停止させてセルに入力
どちらもコメントが表示されていましたが

マクロの実行 → デバッグ → 停止させてセルに入力
この手順ではコメントが表示されなくなりました。


自分なりの結論として
エクセルのエラーで以前の状態を回復を
何度か使っているし、その他の原因も含め
新規ブックでは発生しないため
このブックが破損しているのかなぁ・・・?
と、妥協してみました^^;

以前、他のブックでも同じ症状が
あったような気もするのですが
確信がないので、他のブックで発生するまで
この結論で思い込もうと考えていますw

長文になりましたが
自分では結局、原因にたどり着けなかったので
検証過程を出させてもらいました。

この内容でピンと来るものがあれば
コメント頂けると助かります;;

【65759】Re:ユーザー定義型は定義されていません
発言  247b  - 10/6/25(金) 13:53 -

引用なし
パスワード
   こんにちわ
ピンときたというか、気になる点があったので。

ユーザー定義型は定義されていません
というメッセージは、たとえば、
Dim rst as Recordset
とした場合の、Recordset型の定義が見つからなかった場合に発生します。
うまく説明できないのですが、
DAOとADOでは、Recordset型など、いくつかのオブジェクトで型名の衝突が発生します。
それに関係しているような気がします。
ADO+DAOで問題がでず、どちらか一方で問題が発生するということですので、本当に関係しているか解りませんが。

とりあえず、上記の例でいえば、
Dim rst as DAO.Recordset
または
Dim rst as ADODB.Recordset

と書き換えると衝突は回避できます。
ご参考。

【65761】Re:ユーザー定義型は定義されていません
発言  neptune  - 10/6/25(金) 15:10 -

引用なし
パスワード
   ▼REV さん:
>Microsoft DAO 3.6 Object Library
>以上が設定してある状態で
・・・省略・・・
>このプロシージャを実行し中断状態で
>適当なセルに1111を入力してコメントは出ませんでした。
>
>ですが・・・エラーの原因が気になってしまい
>(Refが問題だろうと思いながらw)
>DAO + ADO で試しコメントなし
>ADO + Ref でコメント発生
>DAO + Ref でコメント発生
>ADO のみ でコメント発生・・・あれ?
>DAO のみ でコメント発生;;
refeditを使った後で不具合発生してますねぇ。。。

正直私にも原因は良く分かりませんが、勘だけで言うとrefeditを使用する
事によって、book自体に何か悪さをしているのかなぁ???
くらいしか思いつきません。

最近、丸投げ質問が目に付きますが(私はスルーしてますけど)、
REV さんのようにキチンと検証して報告してくれるとこちらも勉強になります。

これぞgive and take で本来掲示板のあるべき姿と思ってしまい、
なんかありがたいです。

気持ちが良いので、お礼です。
textboxを使う際の原型です。機能は作りこまなければなりませんが、
あまり見る事はないと思いますので、参考になりましたらどうぞ。

#ササッと書いたので殆ど検証してません。原型という事で^ ^;
#何故かしらuserform2のサイズ変更はtextboxの前にやっておかなければ
#textboxの表示がおかしくなりました。
Win7 XL2007 で作成
何故かしらDropButtonStyle やShowDropButtonWhen はVBEのインテリジェンス
に表示されなかった。?Helpはあるが・・・?

コントロール等の作成:
userformを2こ新規作成、それぞれにtextboxを1個ずつ配置する。
オブジェクト名はデフォルト。

操作:
userform1を表示させ、textboxのボタンをクリック。

'///////////////////////Userform1///////////////////////
Option Explicit

Private Sub TextBox1_DropButtonClick()
  UserForm2.Show vbModal
End Sub

Private Sub UserForm_Initialize()
  With Me.TextBox1
    .SpecialEffect = fmSpecialEffectFlat
    .DropButtonStyle = fmDropButtonStyleReduce
    .ShowDropButtonWhen = fmShowDropButtonWhenAlways
  End With
End Sub

'//////////////////////////////UserForm2/////////////////////////
Option Explicit

Private Sub TextBox1_DropButtonClick()
  MsgBox "ボタンが押されました。"
End Sub

Private Sub UserForm_Initialize()
  With Me
    .Height = .Height - .InsideHeight + TextBox1.Height
  End With
  With Me.TextBox1
    .Left = Me.Left
    .Width = Me.InsideWidth
    .Top = 0
    .SpecialEffect = fmSpecialEffectFlat
    .DropButtonStyle = fmDropButtonStyleEllipsis
    .ShowDropButtonWhen = fmShowDropButtonWhenAlways
  End With
End Sub

【65773】Re:ユーザー定義型は定義されていません
お礼  REV  - 10/6/27(日) 2:41 -

引用なし
パスワード
   ▼247b さん:

>Dim rst as DAO.Recordset
>または
>Dim rst as ADODB.Recordset
>
>と書き換えると衝突は回避できます。

コメントありがとうございます。
[検証結果]
Dim rst as DAO.Recordsetは既に記載済みです。。。
頂いた内容を考えるとデータベースに関するコードに
問題がありそうだったので
データベースに関わる全てのプロシージャをコメントブロックにし
検証してみたところ
症状は変わらずでした;;

だったら・・・と思い

ブックに含まれる全てのプロシージャをコメントにし
Sub test111()
Dim i As Integer
i = 1 / 0
End Sub
のみを実行、という暴挙に出てみましたw

[エラーメッセージなし]

保存→エクセルの再起動→実行

[エラーメッセージなし]

3回ほど繰り返し実行してみましたが
やはりエラーは出ませんでした。

嫌な結果が出てしまいました・・・

となると、今度は逆の手順で
1つずつコメントを解除し検証・・・?
とても時間が掛かりそうです。

それと考えられる原因が
・単純なマナー違反
・誤字、脱字

ここまでお付き合い頂いた方々へ
『ごめんなさい』をする前提で
最後まで検証してみたいと思います^^;

ただ、今の時期は私個人の事情ですが
多忙な時期のため、
検証結果の報告に日数が掛かってしまうため
日付指定で7/15に報告したいと思います。

それと1つのスレッドで
場所を取り過ぎるのも申し訳ないので
報告の時に新しくスレッドを建てたいと思います。

7/15
題名:[定義型未解決事件の真相]

この題名で建てますので
覚えていましたら、検証結果の確認を
して頂けると、嬉しく思います。

【65775】Re:ユーザー定義型は定義されていません
お礼  REV  - 10/6/27(日) 3:39 -

引用なし
パスワード
   ▼neptune さん:

コードの提供ありがとうございました^^
こんな書き方がるんですね
まだまだ始めて日が浅いので勉強になりました^^

>textboxを使う際の原型です。機能は作りこまなければなりませんが、
>あまり見る事はないと思いますので、参考になりましたらどうぞ。

作り込まなければという事でしたが
確認したところ、パーツとして完成形かとww

>#何故かしらuserform2のサイズ変更はtextboxの前にやっておかなければ
>#textboxの表示がおかしくなりました。
>Win7 XL2007 で作成

textboxの表示がおかしくなりました。の意味が
実行してみて初めてわかりましたw

[環境]winXP XL2003

userform2実行後textboxが見えなくなりましたwww
2003ではInitializeでも見えなくなるようです;;

なのでInitializeではなくフォーム起動後に実行して
確認してみたところme.textbox.leftで値を指定すると
textboxが見えなくなるみたいです^^;
i = Me.Left
.Left = i   '変数で指定

.Left = 500  '直接指定

どちらも同じ結果でした^^;
それと環境についてはマルチモニターで
普段エクセルはセカンダリに表示しています。
そのためMe.Leftは負の値になります。(Secモニターを左に置いているので)

シングル環境では確認していませんが
正の値で確認しても同じ結果のようです^^;

今回、頂いたコードは早速使い道があったため
最初からtextboxをフォームの左に配置して
.Leftを使用しない方法で使わせてもらいました^^

それと作成した環境がWin7 XL2007
という事だったので
XL2007で確認したところ
1発で期待通りに動きました。
(もちろんセカンダリーでも1発OK♪)
おそらく問題点は
エクセルのバージョンに依存しているのかと・・・

>これぞgive and take で本来掲示板のあるべき姿と思ってしまい、

そう言って頂けるとありがたいです;;
検証過程やら説明なんかを入れていくと
どうしても長文になってしまい
かなり心配していました^^;

それと表題の『ユーザー定義型・・・』についての
進展が少しありましたので 247b さんへの
返信に記載しています。

退屈しのぎに見て行って下さいな♪

2824 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free