Excel VBA質問箱 IV

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

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


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

【17191】UserFormの右上… SR20DET 04/8/24(火) 17:48 質問[未読]
【17194】Re:UserFormの右上… IROC 04/8/24(火) 17:54 回答[未読]
【17205】Re:UserFormの右上… SR20DET 04/8/24(火) 18:33 質問[未読]
【17208】Re:UserFormの右上… IROC 04/8/24(火) 18:42 回答[未読]
【17210】Re:UserFormの右上… SR20DET 04/8/24(火) 19:12 質問[未読]
【17213】Re:UserFormの右上… IROC 04/8/24(火) 20:08 回答[未読]
【17214】Re:UserFormの右上… SR20DET 04/8/24(火) 20:46 質問[未読]
【17227】Re:UserFormの右上… Asaki 04/8/25(水) 1:02 質問[未読]
【17228】Re:UserFormの右上… IROC 04/8/25(水) 8:41 回答[未読]
【17231】Re:UserFormの右上… SR20DET 04/8/25(水) 9:26 回答[未読]
【17232】Re:UserFormの右上… IROC 04/8/25(水) 9:54 回答[未読]
【17234】Re:UserFormの右上… SR20DET 04/8/25(水) 10:29 お礼[未読]
【17235】Re:UserFormの右上… IROC 04/8/25(水) 10:35 回答[未読]
【17237】Re:UserFormの右上… SR20DET 04/8/25(水) 10:50 回答[未読]
【17238】Re:UserFormの右上… IROC 04/8/25(水) 11:05 回答[未読]
【17239】Re:UserFormの右上… SR20DET 04/8/25(水) 11:21 質問[未読]
【17240】Re:UserFormの右上… IROC 04/8/25(水) 11:26 回答[未読]
【17241】Re:UserFormの右上… SR20DET 04/8/25(水) 11:38 回答[未読]
【17243】Re:UserFormの右上… IROC 04/8/25(水) 12:30 回答[未読]
【17246】Re:UserFormの右上… SR20DET 04/8/25(水) 14:03 お礼[未読]
【17230】Re:UserFormの右上… SR20DET 04/8/25(水) 9:24 回答[未読]

【17191】UserFormの右上…
質問  SR20DET  - 04/8/24(火) 17:48 -

引用なし
パスワード
   非常に簡単な質問だと思いますが…

VBAを用い、ある計算中には、
UserFormにて
「計算中です。」
と、出力しています。

ここで、フォームの右上に"×"マーク(←終了ボタン)が表示されるのですが、
これを表示させない様にするには、そうすれば良いのでしょうか?

ちなみに、最小最大ボタンは表示されない様にしてます。
(確かプロパティで)

よろしくお願い致します。

【17194】Re:UserFormの右上…
回答  IROC  - 04/8/24(火) 17:54 -

引用なし
パスワード
   表示させないようにするのは、API関数を利用する必要があるのですこし大変です。

こちらが参考になると思います。
http://excelfactory.cool.ne.jp/ExcelVBATips/api/api_7.htm


無効にするだけなら簡単です。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then _
  Cancel = True
End Sub

【17205】Re:UserFormの右上…
質問  SR20DET  - 04/8/24(火) 18:33 -

引用なし
パスワード
   ありがとうございます。


早速、ソースに付け加えて、デバッグしてみたのですが、

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
  Cancel = True
End Sub

の部分にきません。。。


なぜでしょうか…???

【17208】Re:UserFormの右上…
回答  IROC  - 04/8/24(火) 18:42 -

引用なし
パスワード
   >早速、ソースに付け加えて、デバッグしてみたのですが、

ユーザーフォームのモジュールにそのままコピペするだけですよ。

【17210】Re:UserFormの右上…
質問  SR20DET  - 04/8/24(火) 19:12 -

引用なし
パスワード
   はい、そのようにしたのですが…とんできません。

もともと、処理の途中に、"×マーク"を押下しても、
終了するわけでもなく、
何も処理が走らない感じなので、ほっといたのですが、
やっぱり、万が一を考えて、"×マーク"を非表示にしたいな、と、
考えておりました。

【17213】Re:UserFormの右上…
回答  IROC  - 04/8/24(火) 20:08 -

引用なし
パスワード
   >もともと、処理の途中に、"×マーク"を押下しても、
>終了するわけでもなく、

そのようなマクロですよ?
Xボタン無効ですから。


>何も処理が走らない感じなので、ほっといたのですが、
ブレイクポイントを設定して実行すれば分かりますよ。


>やっぱり、万が一を考えて、"×マーク"を非表示にしたいな、と、
>考えておりました。
リンク先のコードをおためし下さい。


注.提示されたコードは、ある程度内容を理解してから使って下さい。
まったく理解していないのに使用するのは無謀です。

【17214】Re:UserFormの右上…
質問  SR20DET  - 04/8/24(火) 20:46 -

引用なし
パスワード
   >そのようなマクロですよ?
>Xボタン無効ですから。
いえいえ、教えて下さったソースを入れる前から、
何も処理されてないみたいなんです。。。
→終了されるわけでもなく、メッセージが出るわけでもなく…


また、教えて下さったソースを入れ、ブレイクポイントも設定したんですが、
そこにとばないんです。。。

【17227】Re:UserFormの右上…
質問  Asaki  - 04/8/25(水) 1:02 -

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

すみません、ちょっと疑問なんですが。。。
Excelの話ですか?

【17228】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 8:41 -

引用なし
パスワード
   >ちなみに、最小最大ボタンは表示されない様にしてます。
>(確かプロパティで)

最初から表示されませんよ。

やっぱり何か勘違いしているのでは?

【17230】Re:UserFormの右上…
回答  SR20DET  - 04/8/25(水) 9:24 -

引用なし
パスワード
   さようです。

エクセル2003の話です。

【17231】Re:UserFormの右上…
回答  SR20DET  - 04/8/25(水) 9:26 -

引用なし
パスワード
   ▼IROC さん:
>>ちなみに、最小最大ボタンは表示されない様にしてます。
>>(確かプロパティで)
>
>最初から表示されませんよ。
>
>やっぱり何か勘違いしているのでは?


すいません、「最小最大ボタン」ではなく、
「ヘルプボタン」ですわ。。。

すいません、勘違いでしたf(^^;)

【17232】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 9:54 -

引用なし
パスワード
   状況が良く分かりません。

新規ブックでお試し下さい。

私の掲載したマクロを記述することで
Xボタンが無効になります。

【17234】Re:UserFormの右上…
お礼  SR20DET  - 04/8/25(水) 10:29 -

引用なし
パスワード
   ▼IROC さん:
>状況が良く分かりません。
>
>新規ブックでお試し下さい。
>
>私の掲載したマクロを記述することで
>Xボタンが無効になります。


状況を詳しく説明致しますと…

[要 望]
VBAのフォームの右上に表示される"×マーク"を非表示、もしくは、
押下されても、無効にする(終了処理をしない)にしたい。

[対 処]
ここで、IROC さんに教えてもらった「無効にする(終了処理をしない)」
と、いう下記のソースを挿入してみた。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then _
  Cancel = True
End Sub

[結 果 1]
テストしてみると、上記の部分にブレイクポイントを設定したが、
このソースの部分にこない。

[結 果 2]
ここで、アドバイス通り、新規ファイルにて、上記のソースを挿入し、
同じ様にテストしてみたら、
上記のソースにきて、終了処理は無効にされた。


また、調べてみると、もともとのファイルでは、この処理がなくても、
終了処理が無効となっている(?)みたいで、"×マーク"を押下しても、
終了されない。


こんな感じです。

【17235】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 10:35 -

引用なし
パスワード
   >また、調べてみると、もともとのファイルでは、この処理がなくても、
>終了処理が無効となっている(?)みたいで、"×マーク"を押下しても、
>終了されない。


私には「もともとのファイル」が見えないので判断できませんよ〜

【17237】Re:UserFormの右上…
回答  SR20DET  - 04/8/25(水) 10:50 -

引用なし
パスワード
   失礼しました。

もともとのファイルとは、
データベースよりデータを取得→取得データを基に計算→シートに出力
と、いった処理です。
ここで、取得データを基に計算している間、フォームを出力させ、
シートに出力後、フォームを終了してます。


Private Sub WorkBook_Open()
  
  ' オープニング画面の表示
  frmOpening.Show
  ' イベント有効
  DoEvents
  ' 画面更新抑止
  Application.ScreenUpdating = False  
      :
    [データを取得&計算処理]
    [シート出力処理]
      :
  ' オープニング画面の非表示
  Unload frmOpening
  ' 画面更新解除
  Application.ScreenUpdating = True
End Sub

【17238】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 11:05 -

引用なし
パスワード
   >  ' オープニング画面の表示
>  frmOpening.Show

モーダルで表示すると、フォームを閉じない限り
以降の処理は実行されないと思いますけど・・?

【17239】Re:UserFormの右上…
質問  SR20DET  - 04/8/25(水) 11:21 -

引用なし
パスワード
   ▼IROC さん:
>>  ' オープニング画面の表示
>>  frmOpening.Show
>
>モーダルで表示すると、フォームを閉じない限り
>以降の処理は実行されないと思いますけど・・?


モーダルで表示…?
すいません。私の知識不足により、
上記の内容がわかりません。
わかりやすくいうと、どういうことでしょうか?

また、「以降の処理」と、いうのは、計算処理のことでしょうか?

【17240】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 11:26 -

引用なし
パスワード
   >モーダルで表示…?
ヘルプで show メソッドについてお調べ下さい。


>また、「以降の処理」と、いうのは、計算処理のことでしょうか?
はい。DoEvents以降の処理です。

frmOpening.Show とすると、
処理は、ユーザーフォーム(frmOpening)に移ります。
このフォームが閉じない限り、以下の行は実行されないはずです。
モードレスであれば、フォームが表示されていても
以降の行は実行されます。

しかし、フォーム表示中に処理するなら、
その処理のコードは、ユーザーフォームモジュールに記述するか、
そこからCallするのが一般的だと思います。

【17241】Re:UserFormの右上…
回答  SR20DET  - 04/8/25(水) 11:38 -

引用なし
パスワード
   ▼IROC さん:
>>モーダルで表示…?
>ヘルプで show メソッドについてお調べ下さい。
>
>
>>また、「以降の処理」と、いうのは、計算処理のことでしょうか?
>はい。DoEvents以降の処理です。
>
>frmOpening.Show とすると、
>処理は、ユーザーフォーム(frmOpening)に移ります。
>このフォームが閉じない限り、以下の行は実行されないはずです。
>モードレスであれば、フォームが表示されていても
>以降の行は実行されます。

ありがとうございます。早速調べてみました。
確かに、おっしゃるとおり、
「このフォームが閉じない限り、以下の行は実行されないはず」です。
しかし、現在は実行されます。
そこで、「なんで?」と、思たんですが、
フォームのプロパティ設定に"ShowModal"という項目があり、現在、その値が"False"になっているため、フォームを閉じなくても、以下の行が実行されていると考えられますか?


>しかし、フォーム表示中に処理するなら、
>その処理のコードは、ユーザーフォームモジュールに記述するか、
>そこからCallするのが一般的だと思います。

計算処理は、ユーザーフォームモジュールに記述するか、
もしくは、ユーザーフォームモジュールから計算処理の関数をCallするって意味ですか?

【17243】Re:UserFormの右上…
回答  IROC  - 04/8/25(水) 12:30 -

引用なし
パスワード
   >フォームのプロパティ設定に"ShowModal"という項目があり、
>現在、その値が"False"になっているため、フォームを閉じなくても、
>以下の行が実行されていると考えられますか?
はい。
そのように設定されているなら実行されます。


>計算処理は、ユーザーフォームモジュールに記述するか、
>もしくは、ユーザーフォームモジュールから計算処理の
>関数をCallするって意味ですか?
はい。そのつもりで書かせて頂きました。

処理ごとにプロシージャを分けた方が、
メンテナンス性や開発効率がよいかと思います。
とはいっても、このあたりは個人の考え方によりますけどね。


ひとまず、モーダル表示にして、
ユーザーフォームモジュールの Activateイベントに処理を記述するか、
Callしてみては如何でしょうか?
そうすれば、Xボタンは無効に出来ると思います。

念のため、Excelのバージョンを教えて下さい。

【17246】Re:UserFormの右上…
お礼  SR20DET  - 04/8/25(水) 14:03 -

引用なし
パスワード
   ▼IROC さん:
>処理ごとにプロシージャを分けた方が、
>メンテナンス性や開発効率がよいかと思います。
>とはいっても、このあたりは個人の考え方によりますけどね。

確かにそのとおりですね。
先程載せましたが、下記の処理にて…
すいません、お伝えしてませんでしたが、
一応、計算処理と出力処理は、関数にしてます。

Private Sub WorkBook_Open()
  
  ' オープニング画面の表示
  frmOpening.Show
  ' イベント有効
  DoEvents
  ' 画面更新抑止
  Application.ScreenUpdating = False  
      :
    [データを取得&計算処理]←←←←←←←←←←この部分は関数化
    [シート出力処理]←←←←←←←←←←←←←←この部分は関数化
      :
  ' オープニング画面の非表示
  Unload frmOpening
  ' 画面更新解除
  Application.ScreenUpdating = True
End Sub


>念のため、Excelのバージョンを教えて下さい。
2003です。

処理中に"×マーク"を押下しても、処理が走らないので、
とりあえずは、現状のままで様子をみます。
もし、"×マーク"を非表示にしろ!って、ことになれば、
先程のリンク先を参考にさせて戴きます。

IROC さんいつもありがとうございます。

…RB20DETf(^^;)

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