- ベストアンサー
VBAで「出退勤時間管理」のプログラムを作る際のユーザーフォームのエラーについて
- VBAで「出退勤時間管理」のプログラムを作っています。ユーザーフォームで各種の初期値や設定値を入力しますが、フォームを表示すると「アプリケーション定義またはオブジェクト定義のエラーです。」というエラーが発生します。
- 別のエクセルファイルで同様のフォームを作成したところ、問題なく表示されました。なぜエラーが発生するのか理解できていません。
- コードの量やファイルサイズの制限が原因かもしれません。解決策を教えていただけると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ANo.4です。 忘れていたので追記しておきます。 実際のコードの実行状態をステップ実行させてみて、 どこでエラーになるか確認してみて下さい。 ブレークポイントの設定やステップ実行の方法は御存知でしょうか? http://home.att.ne.jp/zeta/gen/excel/c04p43.htm の「■デバッグの方法」を参考に。
その他の回答 (4)
- kiki_s
- ベストアンサー率59% (147/248)
UserFormの各パーツ類はどういう扱いなのか分かりませんが、 記載のコードを実行したところ、私の環境では正常に動作しました。 コードは何も変更せず、標準モジュールに貼り付けただけです。 (XP Pro SP3 + Excel2007) 念のため Excel97-2003でも動作するのを確認しています。 フォームは、フレーム1個、オプションボタンが4個 フレーム表示は、初期値シートのC8を参照 オプションボタンは、初期値シートのC10を参照 何が原因なのか分かりかねますが、コード上は問題が無いように見えますが、 他のコードが原因でエラーになっている可能性もありそうです。 何か他に特殊な事をしている部分はありませんか?
- onlyrom
- ベストアンサー率59% (228/384)
>同じように書いたコードが、片方はエラーが出る 「同じように」とは、全く同じわずか2行のコード? もしそうなら、エラーが出る方がおかしい。 で、質問者に質問。 ●実際のコードではその部分でエラーが出る、と、どうやって確かめたのか? 実際のコードがそのコードと同じものであれば、 エラーの原因はそこではなく別のところにあると考えるのがふうつでしょう。 今回の場合は特に、 エラーの出ないテストコードをアップしても無意味なので エラーの出る実際のコードをアップして回答を求めるべきだと思いますが。。 以上。
- kiki_s
- ベストアンサー率59% (147/248)
>フォームはシートに張付けているわけではなく、ツールボタンのクリックにより呼び出しますので、その時どのシートが選択されているのかは不定です。 でしたら、シートの選択状態が不定としても表示出来るはずです。 UserFormとして作っている訳ですから。 で、テストマクロにはPrivateが入っていますが、これを外すとどうですか? sub OpenForm() UserForm1.Show End sub モードレスでの表示なんてのもあります。 UserForm1.Show vbModeless
補足
すみません。質問でのコードを書き間違えておりました。 ご指摘のように、関数のスコープは Public にしています。 本体のコードです。 Public Sub OpenForm() With UserForm1 If Worksheets("初期値").Range("C8") Then .Frame1.Visible = True Else .Frame1.Visible = False Select Case Worksheets("初期値").Range("C10") Case 1: .OptionButton1.Value = True Case 2: .OptionButton2.Value = True Case 3: .OptionButton3.Value = True Case 4: .OptionButton4.Value = True End Select .Show End With End Sub このプロシジャーをThisWorkBookに置いたり、Sheet1に置いたり、UserFormに置いたりしましたが、無駄な努力。エラー・メッセージが変わるだけでした。 testはうまくいくのに、同じように書いた本体では質問に書いたエラーが出て、デバッグにするとUserForm1に黄色い帯が付きます。 標準モジュールからUserFormが見えないのが、とても不可解。 もう、全くのお手上げ状態です。 どうか、良い解決策、またはヒントでも結構です。 引続き、お願い致します。
- kiki_s
- ベストアンサー率59% (147/248)
このエラーは複数の原因が絡んで来ます(経験) 該当するシートがアクティブになっていないのかも知れません。 シートをアクティプにしておいてから、 UserFormの呼び出しを実行してみたらどうなりますか? シートをアクティブにするのは御存知だと思いますが。 Worksheets("sheet1").Activate
補足
早速のご助言ありがとうございます。 フォームはシートに張付けているわけではなく、ツールボタンのクリックにより呼び出しますので、その時どのシートが選択されているのかは不定です。 標準モジュールから呼び出せないという事が、よくわかりません。っと言うか、私の勉強不足と言うか。。。 もし、関数のスコープについてご存知であれば、ご教授頂きたいのですが。UserFormがローカルならば、これをグローバルにする宣言とかあるのでしょうか。よろしくお願い致します。 また、この方面に詳しい方、いらっしゃいましたら引続き助言をお願いします。
お礼
ご親切なご指導、アドバイス等ありがとうございました。 言われる通りにデバッグをやってみたところ、ご指摘通りに全く別の所にミスがありました。全くお恥ずかしい。一箇所.valueを付け忘れている所を見つけました。これを修正したところ、Formが出る様になりました。一から十まで懇切丁寧に御指導いただき、お礼の述べ様もございません。ありがとうございました。心より御礼申し上げます。