
「問題が発生したため、MicroSoft Office Excelを
Excel 2007 のVBAで日報を入力する簡単なフォームを作ったのですが、コントロールのTextBoxをダブルクリックすると標題の「問題が発生したため、MicroSoft Office Excel を終了します。ご迷惑をおかけして申し訳ありません。」のエラーが出ました。そこで「作業内容を回復し、MicroSoft Office Excel を再起動する(R)」のチェックを入れて、「送信しない」をクリック、待つことしばらくして回復した後に上記の作業のコントロールを再度ダブルクリックすると、正常に作動しました。しかし一度アプリケーションを終了したのち、再起動後に又行うと同じエラーになります。ちなみに上記のダブルクリックで別のメニューのフォームをVBAマクロで開くようにしています。かなりコントロールを追加したり削除してますので、ファイルが壊れたのでしょうか?。作り替えないで回復する方法はありますでしょうか?どなたかお分かりになる方がいらっしゃいましたら、教えていただければ思います。
No.2ベストアンサー
- 回答日時:
>その2枚目のフォームにListBoxを貼り付けまして、
>そのListBoxにやたら多い入力用の項目(多いものだと300位)をRowSourceで表示して、
>その項目をクリックでメインのフォームのダブルクリックしたTextBoxに転記入力という誠に面倒なことをしてます。
「ListBoxにやたら多い入力用の項目(多いものだと300位)をRowSource」 問題は、ここですね。
それは、悪いけれど、そこは負担が大きすぎるようですから、直したほうがよいと思います。簡単な方法で済みます。
裏技的ですが、
Private Sub UserForm_Initialize()
Dim Ar As Variant
Ar = Application.Transpose(ThisWorkbook.Worksheets("Sheet1").Range("A1:A300").Value)
ListBox1.List = Ar
End Sub
こんな風にして、ListBox に登録することが可能です。とても軽くなります。RowSource は、常に、シートとオブジェクトがリンクされた状態ですから、不安定になりやすいです。ただ、セルを直しても、ListBox を直しても、Link していませんから、UserForm 起動中は、ListBox 内の項目には反映されません。
ありがとうございました。
そうですねListBoxにじかに表示すれば安定しますね。実は今ひとつの難点を質問では申しあげませんでしたが、入力フォームのPCのデスプレイの解像度の問題がありまして、フォームは画面ほぼ一杯で、しかもこのメインフォームにListBoxを貼り付ける余裕すらないんです。しかたなくもう1枚フォームを開かざるをえないと言う状況です。むろんフォームの表示は転記入力するTextBoxの上の表示は駄目ですので
Top,Leftで邪魔にならないところに表示と・・・・苦労に耐えません・・・・・。なんとかしたい。
でも何となく不安なことは確かです。
No.5
- 回答日時:
>DialogにフォームのようにListBoxを貼り付けられるんでしょうか?
ワークシートに貼り付けるフォーム・オブジェクトはお分かりになりますね。それは、本来、このダイヤログシートに使うものだったのです。
当然、ListBox も使えます。ドラッグして貼り付ければ使えますが、
>このDialogのコードウインドウはあるんでしょうか?
独自のものはなく、標準モジュールに書きます。
#3の
'//UserForm モジュール
Private Sub CommandButton1_Click()
で書いたように、ListBox のデータは、登録の仕方は、一般的には、Array 関数をつかいますが、A1:A300 と範囲が広かったりすると、大変な手間が掛かりますので、#3のような方法が好まれるわけです。
>はじめてなものでどうもそのあたりがよくのみこめません。
マニュアルがあると良いのですが……。今は、手に入りません。その内、いろいろ復活してくれるとよいのですが。
Excel 2007 で、ヘルプに出てこない部分があります。私は、Ver.4とVer.5 のVBAやマクロ関数のヘルプもあるのですが、Excel 2007 で復活したコマンドは、昔のものとは違う部分があります。
>>UserForm のSpreadSheet Control を使う方法もあります。
>
>これも全くはじめてです。でも名前からして何となく興味がありますし、試してみたいです。
>で、リファレンスにもこのコントロールは載っていませんで
そうなんですね。他にも、VB6 RunTimeの Common Dialog などが標準で入っているのですが、詳しく説明はありません。VB6を知っている人だけの使いこなしになっています。

No.4
- 回答日時:
他にも、複雑なものは、もうひとつブックを立ち上げてシートを使ったり、UserForm のSpreadSheet Control を使う方法もあります。
>設定は、シートのTab から、挿入
これは、ワークシートのシートタブです。
Ver.5 マクロは、Excel 2007ではなくなると思ったのですが、Excel2007では、Ver.4 マクロコマンドを刷新したようです。あえて使う必要はないけれども、試してみる価値はあると思います。
図を参考にしてください。

ありがとうございました。
>試してみる価値はあると思います。
ほんとに、こんなSheetがあったんですね。
ところで、このDialogにフォームのようにListBoxを貼り付けられるんでしょうか?、それとこのDialogのコードウインドウはあるんでしょうか?それとも1つのオブジェクトとしてイベントプロシージャは標準モジュールに書くのでしょうか?
はじめてなものでどうもそのあたりがよくのみこめません。
>UserForm のSpreadSheet Control を使う方法もあります。
これも全くはじめてです。でも名前からして何となく興味がありますし、試してみたいです。
で、リファレンスにもこのコントロールは載っていませんで、ユーザーフォームの挿入のようにVBAのツールバーにもないようなんですが・・・・・・。その使用方法は?
No.3
- 回答日時:
Excel 2007 を使いながら、解像度の問題だというと、よほど、大きなデータなのでしょうか?特別な方法で作りこまないといけないような気がしています。
>フォームは画面ほぼ一杯で、しかもこのメインフォームにListBoxを貼り付ける余裕すらないんです。
本当の問題は、これを解決したいし、それを解決していれば、そもそものハングの問題もでなかっただろうし、便利だったろうには違いないでしょう。そして、ListBox のようなものがポップアップすればよいわけですね。それは、サブフォームというわけですね。正直なところ、あまり、私は、UserForm が得意とは言えないので、豊富なアイデアが湧いてこないのですが、画面一杯を使っているなら、二種類の方法を考えてみました。
使ってみた感覚では、2番目のDialogSheetのほうが、遥かに軽いです。(マニュアルなんて、もう持っている人はいないでしょうけれど。)
最初は、月なみですが、一般的なのは、MultiPage の上で使う方法があります。
こうすれば、UserForm の入れ出しを気にしなくて済みます。
'//UserForm モジュール
'//TextBox をダブルクリックすると、MultiPage が切り替わる
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MultiPage1.Value = 1
End Sub
'//次のページにListBox を置いておきます。
'//一応、MultiPageのフレームをダブルクリックをすると、切り替わる
Private Sub MultiPage1_DblClick(ByVal Index As Long, ByVal Cancel As MSForms.ReturnBoolean)
If MultiPage1.Value = 1 Then
MultiPage1.Value = 0
Else
MultiPage1.Value = 1
End If
End Sub
'(ただし、これは、ListBox 内にイベントを設けて、値をクリックしたら、戻しても良いと思います。)
**
二番目は、DialogSheet を使う方法です。さっぱり何をしているのか分からないかもしれませんが、テクニックのひとつです。DialogSheets(1) の設定は、シートのTab から、挿入--MS Excel 5.0 ダイヤログでシートを作る方法です。そこから、ListBoxを置きます。ここには、直接、マクロは置けません。
'//UserForm モジュール
Private Sub CommandButton1_Click()
Dim Ar As Variant
Dim buf As String
Ar = Application.Transpose(ThisWorkbook.Worksheets("Sheet1").Range("A1:A300").Value)
'//配列が数値の場合のオプション
ReDim Preserve Ar(0 To 299)
buf = Join(Ar, ",")
Ar = Split(buf, ",")
'//
With DialogSheets(1)
.ListBoxes(1).List = Ar
.Show
End With
End Sub
'//DialogSheetのListBoxのマクロに設定(標準モジュール)
Private Sub DialogBoxListClick() '名前は何でも可
Dim myVal As Variant
myVal = DialogSheets(1).ListBoxes(1).Value
UserForm1.TextBox1.Value = myVal
DialogSheets(1).Hide
End Sub
ありがとうございます。
>よほど、大きなデータなのでしょうか?
いえ、データそのものは全然大きくないんです。
ただ、やたら入力項目とその選択肢が多いんでどうしてもその表示でフォームを一杯使ってしまうと言うことかと・・・・。
>一般的なのは、MultiPage の上で使う方法があります。
実はMultiPageは既に1枚張り付いてまして、2枚目を貼るには既に場所的に余裕がない状態です。
>二番目は、DialogSheet を使う方法です。
全くはじめて聞く方法です。
>設定は、シートのTab から、挿入
この挿入はシートのツールバーの挿入?<テーブル・図・グラフ・リンク・テキスト>
それともVBAの挿入?<ユーザーフォーム・標準モジュール・クラスモジュール>
私の何か勘違か両方共 < MS Excel 5.0 ダイヤログ > の項目が無いようなんですが・・・・。
すみません、はじめてのことで。
No.1
- 回答日時:
>コントロールのTextBoxをダブルクリックする
>ダブルクリックで別のメニューのフォームをVBAマクロで開くようにしています。
ダブルクリックで、一覧か何かを出すのでしょうか。二重に出すわけですよね。
もしそうなら、それは、可能だとしても無茶ではないでしょうか。
私は、自分だけのものならともかく、UserForm を2個使うのは、失敗が多いです。
何か代わりのものを探してみたらいかがですか?ComboBox, ListBox にするとか。また、DialogSheet(Ver.5スタイル) でも良いと思います。
それとも、ダブルクリックで、UserForm が入れ替えになるのですか?
そうしたら、Cancel= True は入っていますか?
私も、正確にこれだとは言い切れません。ただ、読んでみた範囲では、アブない感じかなっていう気がします。
普通は、「ダブルクリックで別のメニューのフォームをVBAマクロで開く」っていうことは、理由は分からなくても、そういうことはしません。たぶん、オブジェクトのひとつをSelect した状態から、次のUserForm などには移れないので、コンフリクトするのかもしれません。
>ファイルが壊れたのでしょうか?。
特に、Offfice 2007 では、それはないと思います。
私のコードでは、コントロールを外す時に順序を間違えると、アプリケーションのハングが出ます。
ありがとうございました。
フォームを再度作り直して解決しました。何だったんでしょうね?
おっしゃるやはり二重フォームのせいでしょうかね・・・・・?
>UserForm を2個使うのは、失敗が多いです。
>何か代わりのものを探してみたらいかがですか?ComboBox, ListBox にするとか。また、>DialogSheet(Ver.5スタイル) でも良いと思います。
実はその2枚目のフォームにListBoxを貼り付けまして、そのListBoxにやたら多い入力用の項目(多いものだと300位)をRowSourceで表示して、その項目をクリックでメインのフォームのダブルクリックしたTextBoxに転記入力という誠に面倒なことをしてます。なぜかと言いますとこのフォームを使う連中(10人ほどの職人)はほとんど普段パソコンなどさわったこともなく、なるべく入力を簡単ににとのことで考えた末そのようになったしだいです。きっともっと安全な方法があるでしょうね、なにせVBAはほぼど素人に近いので考え出せませんでした・・・・・・。とりあえずこれでやってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Word(ワード) office 2021へ自分用のクイックアクセスとマクロをコピーしたい 2 2023/03/11 21:15
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- ノートパソコン EXCEL のドキュメントの回復について 2 2023/03/19 17:16
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- その他(Microsoft Office) Office Home & Business 2021で外付けHDにあるファイルを開く方法 3 2022/06/08 22:26
- Excel(エクセル) Excel2010 VBAが特定動作で実行出来なくなる 7 2022/12/29 14:26
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access2000 フォーム表示位置が...
-
スナップショットにしているの...
-
ExcelのComboboxでマウスのスク...
-
スクロールバーをVBAで操作したい
-
ACCESS フォームのサイズ調整
-
エクセル上に画像を貼り付けて...
-
実行エラー'424' ????
-
エクセルのVBAでマクロ実行...
-
エクセル VBA メール本文に指定...
-
エクセルで、抽出したデータだ...
-
X-Ripperというフリーウェアに...
-
前のレコードの値を自動で入れたい
-
Access 複数フォームを...
-
ACCESS 複数のフォームから同一...
-
サイホンの原理
-
レコード→CD
-
accessでオートナンバーを使わ...
-
「パラメータが少なすぎます。3...
-
入力した値をコンボボックスに...
-
ACCESSのフォームでボタンを押...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのComboboxでマウスのスク...
-
スクロールバーをVBAで操作したい
-
実行エラー'424' ????
-
ACCESS フォームのサイズ調整
-
Access2000 フォーム表示位置が...
-
Accessで任意のフォーム以外直...
-
エクセル上に画像を貼り付けて...
-
マクロボタンが勝手に飛び回る
-
エクセルのVBAでマクロ実行...
-
access 最大化した時の画面の...
-
access起動時に表示するフォーム
-
Exitイベントから自分自身のコ...
-
access 終了時に「test」とい...
-
Accessで起動時にフォームが開...
-
ワークシート上に検索用のボッ...
-
Accessのメニューバーを消したい!
-
Accessボタンで並び替え
-
Access2000形式からAccess2007...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
おすすめ情報