Excel VBA質問箱 IV

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

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


7752 / 13645 ツリー ←次へ | 前へ→

【36953】Excelが強制終了してしまいます。 carerra 06/4/18(火) 22:56 質問[未読]
【36956】Re:Excelが強制終了してしまいます。 ichinose 06/4/19(水) 8:01 発言[未読]
【37027】Re:Excelが強制終了してしまいます。 carerra 06/4/19(水) 22:54 質問[未読]
【37038】Re:Excelが強制終了してしまいます。 ichinose 06/4/20(木) 8:00 発言[未読]
【37057】Re:Excelが強制終了してしまいます。 Jaka 06/4/20(木) 13:46 発言[未読]
【37058】Re:Excelが強制終了してしまいます。 Blue 06/4/20(木) 13:56 発言[未読]
【37080】Re:Excelが強制終了してしまいます。 carerra 06/4/20(木) 22:09 お礼[未読]
【37094】Re:Excelが強制終了してしまいます。 ichinose 06/4/21(金) 8:33 発言[未読]
【37095】Re:Excelが強制終了してしまいます。 carerra 06/4/21(金) 9:29 発言[未読]

【36953】Excelが強制終了してしまいます。
質問  carerra  - 06/4/18(火) 22:56 -

引用なし
パスワード
   こんばんわ。

標記のことで、教えて頂けたらと思います。

仕事で使っているExcelファイルなのですが、以前は、各シートに直接入力していたのですが、入力する項目が多く見にくかったため、ユーザーフォームにて入力をして、各シートに反映するVBAを組んでみました。
が、この入力するユーザーフォームを呼び出す際に、Excelが強制終了してしまいます。
強制終了した後にエラー検出しても、エラーはありませんとなります。

ユーザーフォム1のコマンドボタンより、ユーザーフォーム2をLoadして、コンボボックスのリスト内容を与えてから、表示させる方法をとってます。このコマンドボタンを押した瞬間にExcelが強制終了となります。

デバッグ機能を使ってみると、

ユーザーフォーム1.Hide
Load ユーザーフォーム2 ← このときにオブジェクト変数またはwithブロック変数が設定されてませんと表示されます。
ID番号.Value="新規"
ID番号.SetForcus
コンボボックス1.Value=Sheets("シート1").Range("A1:A10").value ←コンボボックス1.Value=Nullとなっています。
以下同じような感じで40個程コンボボックスがあります。

変数が設定されていませんというのが問題かなと思うのですが、ヘルプとか見ても良く分からなかったため、質問させていただきました。
対処方法があれば、教えていただけたらと思います。

【36956】Re:Excelが強制終了してしまいます。
発言  ichinose  - 06/4/19(水) 8:01 -

引用なし
パスワード
   ▼carerra さん:
おはようございます。
>標記のことで、教えて頂けたらと思います。

ユーザーフォーム2のInitializeイベントプロシジャー内で
記述されたエラー原因でトラップが発生している可能性があります。

>デバッグ機能を使ってみると、
>
>ユーザーフォーム1.Hide
>Load ユーザーフォーム2 ← このときにオブジェクト変数またはwithブロック変数が設定されてませんと表示されます。

この後、続けてF8キーを押して見てください。

Initializeイベントプロシジャー内を1行づつ実行していきます。

続けてF8キーを押していって

本当のエラーの原因になっているステートメントを探り当ててください。
再び、上記の内容のエラーが発生します。

その行に何らかの問題あります。

試してみてください。


>ID番号.Value="新規"
>ID番号.SetForcus
>コンボボックス1.Value=Sheets("シート1").Range("A1:A10").value ←コンボボックス1.Value=Nullとなっています。
>以下同じような感じで40個程コンボボックスがあります。
>
>変数が設定されていませんというのが問題かなと思うのですが、ヘルプとか見ても良く分からなかったため、質問させていただきました。
>対処方法があれば、教えていただけたらと思います。

【37027】Re:Excelが強制終了してしまいます。
質問  carerra  - 06/4/19(水) 22:54 -

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

お返事ありがとうございます。

>ユーザーフォーム2のInitializeイベントプロシジャー内で
>記述されたエラー原因でトラップが発生している可能性があります。

 ご指摘ありがとうございます。

>>ユーザーフォーム1.Hide
>>Load ユーザーフォーム2 ← このときにオブジェクト変数またはwithブロック変数が設定されてませんと表示されます。
>
>この後、続けてF8キーを押して見てください。
>
>Initializeイベントプロシジャー内を1行づつ実行していきます。
>
>続けてF8キーを押していって
>
>本当のエラーの原因になっているステートメントを探り当ててください。
>再び、上記の内容のエラーが発生します。
>
>その行に何らかの問題あります。
>
>試してみてください。
>
>
>>ID番号.Value="新規"
>>ID番号.SetForcus
>>コンボボックス1.Value=Sheets("シート1").Range("A1:A10").value ←コンボボックス1.Value=Nullとなっています。
>>以下同じような感じで40個程コンボボックスがあります。
>>

 返信していただいたのに、申し訳ないのですが、まだご指摘いただいたことを実行できておりません。明日にでも検証してみたいと思います。

 的外れな質問かもしれませんが、↑のコンボボックスにシートからデータを持ってきているのですが、これがNull値となっているのは問題ないのでしょうか?
 シートのデータ入力欄は、都合上空欄が多数ある状態です。これがNull値の原因となっていると思うのですが・・・。

【37038】Re:Excelが強制終了してしまいます。
発言  ichinose  - 06/4/20(木) 8:00 -

引用なし
パスワード
   ▼carerra さん:
おはようございます。


>>
>>
>>>ID番号.Value="新規"
>>>ID番号.SetForcus
>>>コンボボックス1.Value=Sheets("シート1").Range("A1:A10").value ←コンボボックス1.Value=Nullとなっています。
>>>以下同じような感じで40個程コンボボックスがあります。
>
> 的外れな質問かもしれませんが、↑のコンボボックスにシートからデータを持ってきているのですが、これがNull値となっているのは問題ないのでしょうか?
> シートのデータ入力欄は、都合上空欄が多数ある状態です。これがNull値の原因となっていると思うのですが・・・。

これは、これでエラーになるでしょうねえ!!
でも、私には上記のコードがどこに書かれたコードなのか
わかりません。

よって、

Load ユーザーフォーム2

のエラーの原因がこれなのかと聞かれても
私には、わかりません。

あのね、
こういう不具合の質問をするときは、

carerra さんの投稿の手順どおりに行えば誰でも
carerra さんと同じエラーが発生するような手順書が必要なんです。


そのためには
 フォームを作成する手順書
 シートにあるデータを作成する手順書
 それからコードの提示
 コード実行してから
 そのエラーを発生させるためのオペレーティング
なんていう記述はちょっと考えただけでも必要ですよね!!

見ている方がさほど頭を使わなくても
この手順書どおり行えば、同じ不具合が再現できる
記述を心がけてください。


見ている人は、この再現が出来てから考えるのですから・・・。


こういう記述をすることは簡単ではありませんが、
質問をわかりやすく記述することはきっと
将来、役に立つと私は思っています。

【37057】Re:Excelが強制終了してしまいます。
発言  Jaka  - 06/4/20(木) 13:46 -

引用なし
パスワード
   ichinose さん carerra さん こんにちは。

ちろっと見ただけですが
>コンボボックス1.Value=Sheets("シート1").Range("A1:A10").value ←コンボボックス
これって、A1:A10の配列をコンボボックスの1番上のテキスト部に入れようとしても
入らないと思います。
コンボボックス1.List=Range(・・・・・).Vlaue
としないと。

PS,文中に半角カタカナが混じると見づらいと思うのは私だけでしょうか?

【37058】Re:Excelが強制終了してしまいます。
発言  Blue  - 06/4/20(木) 13:56 -

引用なし
パスワード
   >PS,文中に半角カタカナが混じると見づらいと思うのは私だけでしょうか?
見づらいですね。
というか、Web上の掲示板上ではなるべく使わないほうが良い文字です。>半角カタカナ
参考:http://apex.wind.ne.jp/tetsuro/izonmoji/

【37080】Re:Excelが強制終了してしまいます。
お礼  carerra  - 06/4/20(木) 22:09 -

引用なし
パスワード
   ichinoseさん、jakaさん、Blueさん こんばんわ。

お返事ありがとうございました。また、返事が遅くなりすみません。

いろいろとご指摘ありがとうございます。
また、言葉足らずで大変申し訳ないです。

さて、問題の強制終了ですが、ここ1ヶ月程、ノイローゼになりそうなぐらい悩んでましたが、今日、すっきりと解決(たぶん)しました。今夜はゆっくり眠れそうです。
大体が、この入力表を表示させたあと、閉じて、保存して、再度ファイルを開いて入力表を表示させようとすると強制終了していました。
ただ、他の操作をして、この入力表を表示させるとうまくいくので、原因がいまいち特定できずにいました。

解決の方法なのですが・・・

以前のコードですと、リスト表示を↓のとおり書いておりました。

Private sub UserForm_Initialize()

コンボボックス1.List = Sheets("シート").Range("A1:A10").Value

End sub
としていたのを、今日↓のように変えてみたところうまくいきました。

Private sub UserForm_Initialize()

入力表(ユーザーフォーム).Controls("コンボボックス1").Value = Sheets("シート").Range("A1:A10").Value

End sub


このユーザーフォームの仕様で、ユーザーフォームの中にマルチページを配置しています。マルチページを5ページ配置し、その中にコンボ・テキストボックスを150程配置していました。

この入力表のユーザーフォームを別のユーザーフォームのコマンドボタンから表示させるようにしていました。

入力表のコンボボックスには、シート1のA列から仮にZ列までの各列の2行目から10行目までのデータを反映することとします。

このような感じで、私の条件と似たようなことができると思います。

入力表を呼び出すユーザーフォームをコマンドボタンをそれぞれ、ユーザーフォーム1とコマンドボタン1とします。

入力表のほうのユーザーフォームをユーザーフォーム2とします。

ユーザーフォーム1のコマンドボタン1のイベント
Private sub コマンドボタン1_Click()
ユーザーフォーム1.Hide
ユーザーフォーム2.Show
End sub

ユーザーフォーム2のInitializeイベント
Private sub UserForm_Initialize()
コマンドボックス1.List = Sheets("シート1").Range("A2:A10").Value
コマンドボックス2.List = Sheets("シート1").Range("B2:B10").Value
とコンボボックスが27個とZ列までのデータ範囲を順次書いてみてください。
End sub

これで、似たような条件が完成すると思うのですが・・・

これで、入力表のユーザーフォーム2を表示させようとすると、エクセルが強制終了していました。
これを、上記で書いたように次のようにすると・・・

ユーザーフォーム2のInitializeイベント
Private sub UserForm_Initialize()
ユーザーフォーム2.Controls("コマンドボックス1").List = Sheets("シート1").Range("A2:A10").Value
ユーザーフォーム2.Controls("コマンドボックス2").List = Sheets("シート1").Range("B2:B10").Value
とコンボボックスが27個とZ列までのデータ範囲を順次書いてみてください。
End sub

そうすると、強制終了が今のところはなくなりました。

もし、強制終了しなかったら、ごめんなさい。何かが足りないか、他の原因なのかも知れないということですよね。

最後になりましたが、いろいろとご親切にありがとうございました。

【37094】Re:Excelが強制終了してしまいます。
発言  ichinose  - 06/4/21(金) 8:33 -

引用なし
パスワード
   おはようございます。

詳しい記述になっていましたね。
記述が大変だったかと思います。

内容を見させていただきました。

残念ながら、私の環境では再現しませんでした。

コマンドボックス1.List = Sheets("シート1").Range("A2:A10").Value

このコードは、正常に処理されています。
(ちゃんと、マルチページに配置しましたよ)

>ただ、他の操作をして、この入力表を表示させるとうまくいくので、原因がいまいち特定できずにいました。

これがポイントでしょうか?

これがどんな処理なのかも興味があります。
正常に処理できたみたいなので
見ていないかもしれませんが、
できたら、この他の操作の内容も知りたいですねえ!!

【37095】Re:Excelが強制終了してしまいます。
発言  carerra  - 06/4/21(金) 9:29 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。

>
>>ただ、他の操作をして、この入力表を表示させるとうまくいくので、原因がいまいち特定できずにいました。
>
>これがポイントでしょうか?
>
>これがどんな処理なのかも興味があります。
>正常に処理できたみたいなので
>見ていないかもしれませんが、
>できたら、この他の操作の内容も知りたいですねえ!!

↑の操作は案内メニュー的な、ユーザーフォーム1の中に、他のユーザーフォームを呼び出したり、シートへ移動したりするだけのコマンドボタンを配置しているだけなので、直接は関係ないと思います。

この強制終了なのですが、昨日も書いてたのですが、私の作ったファイルでは、ユーザーフォーム1のコマンドボタンから、ユーザーフォーム2を表示させ、何もせずにそのまま閉じて、保存をします。またすぐに、ファイルを開き一番目にこのユーザーフォム2を表示させようとすると、強制終了してしまいます。
そこで、ファイルを開くところまで同じようにして、↑に書いてありますが、他のシートに移動したり、他のユーザーフォームを表示させたりした後に、このユーザーフォーム2を表示させるとうまくいくので、これがまた謎なのです。
このユーザーフォーム2を表示させるときに、どんな状況でも強制終了するなら、間違いなくユーザーフォーム2が悪いわけなのですが・・・

また、コードが提示できたら、提示いたします。

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