Excel VBA質問箱 IV

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

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


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

【4681】マクロのuserformを全画面表示したい あゆ 03/4/2(水) 17:31 質問
【4684】Re:マクロのuserformを全画面表示したい bykin 03/4/2(水) 23:27 回答
【4712】Re:マクロのuserformを全画面表示したい あゆ 03/4/3(木) 14:42 お礼
【4725】Re:マクロのuserformを全画面表示したい bykin 03/4/3(木) 18:49 回答
【4751】Re:マクロのuserformを全画面表示したい あゆ 03/4/4(金) 11:41 質問
【4767】Re:マクロのuserformを全画面表示したい bykin 03/4/4(金) 20:10 回答
【4768】Re:マクロのuserformを全画面表示したい bykin 03/4/4(金) 20:12 発言
【4705】ユーザフォームをモードレスで・・・ こう 03/4/3(木) 13:13 回答
【4711】Re:ユーザフォームをモードレスで・・・ あゆ 03/4/3(木) 14:38 質問
【4724】GetDesktopWindow こう 03/4/3(木) 18:15 回答
【4764】Re:GetDesktopWindow あゆ 03/4/4(金) 17:23 お礼
【4734】【過去ログ】ブックを表示させないでユーザ... こう 03/4/3(木) 23:52 発言

【4681】マクロのuserformを全画面表示したい
質問  あゆ  - 03/4/2(水) 17:31 -

引用なし
パスワード
   マクロでuserformを全画面表示しておいたまま、裏でエクセルマクロを実行して、終了したらmsgboxで終了メッセージを表示したいのですが、どのようにすればいいですか?

【4684】Re:マクロのuserformを全画面表示したい
回答  bykin  - 03/4/2(水) 23:27 -

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

>マクロでuserformを全画面表示しておいたまま、裏でエクセルマクロを実行
エクセルの画面が見えたら困るってことなんかな?
全画面表示やのうて、フォームを表示するときにエクセルの画面を隠すってのではあきまへんか?
↓こんなの

'標準モジュール
Sub test()
  Dim OrgState As Integer
  OrgState = Application.WindowState
  Application.WindowState = xlMinimized
  Load UserForm1
  UserForm1.Show
  MsgBox "処理終了"
  Application.WindowState = OrgState
  Unload UserForm1
  Set UserForm1 = Nothing
End Sub

Sub 長い処理()
  Dim i As Long
  Dim j As Long
  For i = 1 To 10000
    j = j * 1
    DoEvents
  Next
End Sub

'フォームモジュール
Private Sub UserForm_Activate()
  長い処理
  Me.Hide
End Sub

Visibleプロパティを操作してもええねんけど、エラーで終了したら後が困るんで、
WindowStateプロパティ使ってみました。
はずしてたらかんにんな。
ほな。

【4705】ユーザフォームをモードレスで・・・
回答  こう E-MAIL  - 03/4/3(木) 13:13 -

引用なし
パスワード
   あゆさん,こんにちわ。
>マクロでuserformを全画面表示しておいたまま、裏でエクセルマクロを実行して、終了したらmsgboxで終了メッセージを表示したいのですが、どのようにすればいいですか?

Excel2000以上前提ですが・・・

全画面サイズのUserformを準備しておき,
  UserForm1.Show vbModeless
   :
  (マクロの実行)  
   :
  Msgbox "処理終了"
で,どうでしょう?

Userformのサイズを全画面サイズにするのはどうしましょうか?

【4711】Re:ユーザフォームをモードレスで・・・
質問  あゆ  - 03/4/3(木) 14:38 -

引用なし
パスワード
   ▼こう さん:
>あゆさん,こんにちわ。
>>マクロでuserformを全画面表示しておいたまま、裏でエクセルマクロを実行して、終了したらmsgboxで終了メッセージを表示したいのですが、どのようにすればいいですか?
>
>Excel2000以上前提ですが・・・
>
>全画面サイズのUserformを準備しておき,
>  UserForm1.Show vbModeless
>   :
>  (マクロの実行)  
>   :
>  Msgbox "処理終了"
>で,どうでしょう?
>
>Userformのサイズを全画面サイズにするのはどうしましょうか?

ありがとうございます。
おっしゃるように、全画面表示にするには、どうしたらよいのでしょうか???

【4712】Re:マクロのuserformを全画面表示したい
お礼  あゆ  - 03/4/3(木) 14:42 -

引用なし
パスワード
   ▼bykin さん:
>こんばんわ。
>
>>マクロでuserformを全画面表示しておいたまま、裏でエクセルマクロを実行
>エクセルの画面が見えたら困るってことなんかな?
>全画面表示やのうて、フォームを表示するときにエクセルの画面を隠すってのではあきまへんか?
>↓こんなの
>
>'標準モジュール
>Sub test()
>  Dim OrgState As Integer
>  OrgState = Application.WindowState
>  Application.WindowState = xlMinimized
>  Load UserForm1
>  UserForm1.Show
>  MsgBox "処理終了"
>  Application.WindowState = OrgState
>  Unload UserForm1
>  Set UserForm1 = Nothing
>End Sub
>
>Sub 長い処理()
>  Dim i As Long
>  Dim j As Long
>  For i = 1 To 10000
>    j = j * 1
>    DoEvents
>  Next
>End Sub
>
>'フォームモジュール
>Private Sub UserForm_Activate()
>  長い処理
>  Me.Hide
>End Sub
>
>Visibleプロパティを操作してもええねんけど、エラーで終了したら後が困るんで、
>WindowStateプロパティ使ってみました。
>はずしてたらかんにんな。
>ほな。

質問に答えていただきありがとうございます!
私のレベルが低いため、上記をうまく理解することが出来なくて。。。
すみませんでした、お手数おかけしました。

【4724】GetDesktopWindow
回答  こう E-MAIL  - 03/4/3(木) 18:15 -

引用なし
パスワード
   あゆさん,こんにちわ。

マイクロソフト サポート技術情報 - 404924
[AC95] 画面の解像度を調べる方法
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/404/9/24.asp
からの情報を元にちょっと改修してみました。

以下のコードを「標準モジュール」に貼り付けてください。
  Dim xx, yy As Integer
  Type RECT
    x1 As Long
    y1 As Long
    x2 As Long
    y2 As Long
  End Type
 
  Declare Function GetDesktopWindow Lib "User32" () As Long
  Declare Function GetWindowRect Lib "User32" _
        (ByVal hWnd As Long, rectangle As RECT) As Long

  Function GetScreenResolution() 'As String
  Dim R As RECT
  Dim hWnd As Long
  Dim RetVal As Long
    hWnd = GetDesktopWindow()
    RetVal = GetWindowRect(hWnd, R)
    'GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
    xx = R.x2 - R.x1
    yy = R.y2 - R.y1

  End Function
  '---------------------------------------------------------------
  Sub xxx()
    Call GetScreenResolution
   
    UserForm1.Height = yy * 0.75
    UserForm1.Width = xx * 0.75
    UserForm1.Show vbModeless
      ' :
      '処理
      ' :
      Application.Wait (Now + TimeValue("0:00:05"))
    Unload UserForm1
    MsgBox "処理が終了しました"
  End Sub


求めた画面サイズの単位がピクセル,ユーザフォームのサイズがポイント
なので,変換(x0.75)しています。

この変換についてのネタ元↓
http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=9565;id=Excel
Thanx!! > JuJuさん(^^)

【4725】Re:マクロのuserformを全画面表示したい
回答  bykin  - 03/4/3(木) 18:49 -

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

>上記をうまく理解することが出来なくて。。。

ちょっと説明不足やったかな?(^^;;
Sub 長い処理()っていうプロシージャがありまっしゃろ?
これの中身を
>裏でエクセルマクロを実行して
で、あゆはんが作ってるコードに置き換えてみてください。
フォームを表示したときに、Private Sub UserForm_Activate() で、
フォームの側からそのコードを実行するようにしてます。
この方法やったら、フォームをモードレスで表示する必要もありまへん。
(97でもOKってこと)
それにエクセルの画面を隠すほうがAPIとか使う必要ないから簡単やと思うねんけどな。
いっぺん試してみておくれやす。

ほな。

【4734】【過去ログ】ブックを表示させないでユー...
発言  こう E-MAIL  - 03/4/3(木) 23:52 -

引用なし
パスワード
   過去ログで↓なんがありました。ご参考。

以下のファイルを作成し、拡張子を「.vbs」で保存してください。
Dim MyObject
Set MyObject = Wscript.CreateObject("Excel.Application")
With MyObject
    .Visible = False
    .Workbooks.Open ("C:\Book.xls")
    .Run ("Book.xls!UserForm_show")
    .Quit
End With
Set MyObject = Nothing

http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=10310;id=Excel

【4751】Re:マクロのuserformを全画面表示したい
質問  あゆ  - 03/4/4(金) 11:41 -

引用なし
パスワード
   bykin さん

こんにちわ。あゆです。
色々ありがとうございます。bykinさんの指示とおり試してみました。
初心者で、理解力なくてすいません。教えて下さい。
マクロ実行するのは、どの「sub」から実行するのでしょうか。
ほんますいませんm(__)m


>ちょっと説明不足やったかな?(^^;;
>Sub 長い処理()っていうプロシージャがありまっしゃろ?
>これの中身を
>>裏でエクセルマクロを実行して
>で、あゆはんが作ってるコードに置き換えてみてください。
>フォームを表示したときに、Private Sub UserForm_Activate() で、
>フォームの側からそのコードを実行するようにしてます。
>この方法やったら、フォームをモードレスで表示する必要もありまへん。
>(97でもOKってこと)
>それにエクセルの画面を隠すほうがAPIとか使う必要ないから簡単やと思うねんけどな。
>いっぺん試してみておくれやす。
>
>ほな。

【4764】Re:GetDesktopWindow
お礼  あゆ  - 03/4/4(金) 17:23 -

引用なし
パスワード
   こうさん

色々調べていただいて、ありがとうございます!
下記の記述で、試してみます)^o^(
でも、きっと私のことですから、上手くいくか不安ですが・・・
また書き込みしま〜す!

▼こう さん:
>あゆさん,こんにちわ。
>
>マイクロソフト サポート技術情報 - 404924
>[AC95] 画面の解像度を調べる方法
>http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/404/9/24.asp
>からの情報を元にちょっと改修してみました。
>
>以下のコードを「標準モジュール」に貼り付けてください。
>  Dim xx, yy As Integer
>  Type RECT
>    x1 As Long
>    y1 As Long
>    x2 As Long
>    y2 As Long
>  End Type
> 
>  Declare Function GetDesktopWindow Lib "User32" () As Long
>  Declare Function GetWindowRect Lib "User32" _
>        (ByVal hWnd As Long, rectangle As RECT) As Long
>
>  Function GetScreenResolution() 'As String
>  Dim R As RECT
>  Dim hWnd As Long
>  Dim RetVal As Long
>    hWnd = GetDesktopWindow()
>    RetVal = GetWindowRect(hWnd, R)
>    'GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
>    xx = R.x2 - R.x1
>    yy = R.y2 - R.y1

>  End Function
>  '---------------------------------------------------------------
>  Sub xxx()
>    Call GetScreenResolution
>   
>    UserForm1.Height = yy * 0.75
>    UserForm1.Width = xx * 0.75
>    UserForm1.Show vbModeless
>      ' :
>      '処理
>      ' :
>      Application.Wait (Now + TimeValue("0:00:05"))
>    Unload UserForm1
>    MsgBox "処理が終了しました"
>  End Sub

>
>求めた画面サイズの単位がピクセル,ユーザフォームのサイズがポイント
>なので,変換(x0.75)しています。
>
>この変換についてのネタ元↓
>http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=9565;id=Excel
>Thanx!! > JuJuさん(^^)

【4767】Re:マクロのuserformを全画面表示したい
回答  bykin  - 03/4/4(金) 20:10 -

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

>マクロ実行するのは、どの「sub」から実行するのでしょうか。
ややこしいのでもう一度説明します。

1.標準モジュールを用意して、下記コード(2つのプロシージャ)をコピペします。
  Sub 長い処理() の中には実際の処理を記入してください。

Sub test()
  Dim OrgState As Integer
  OrgState = Application.WindowState
  Application.WindowState = xlMinimized
  Load UserForm1
  UserForm1.Show
  MsgBox "処理終了"
  Application.WindowState = OrgState
  Unload UserForm1
  Set UserForm1 = Nothing
End Sub

Sub 長い処理()
  '*********ここからは実際の処理を記入(下のコードはダミーです)
  Dim i As Long
  Dim j As Long
  For i = 1 To 10000
    j = j * 1
    DoEvents
  Next
  '*********ここまで
End Sub

2.ユーザーフォーム(UserForm1)を挿入して、モジュールに下記コードをコピペします。
  フォームにはラベル等で「処理中」と書いておけばええと思います。

Private Sub UserForm_Activate()
  長い処理
  Me.Hide
End Sub

3.test() プロシージャを実行します。
  実行するとフォームが表示され、それと同時にフォームの Activate イベントによって
  Sub 長い処理() が実行されます。

4.長い処理() が終了すると Me.Hide でフォームは Me.Hide で非表示となり、
  元の test() プロシージャに制御が戻り、「処理終了」のメッセージが表示されます。

・・・これでわかりまっか?

<おまけ>
長い処理そのものをフォームモジュールの中に書いてもかまいまへん。
その場合は標準モジュールの Sub 長い処理() は削除して、その代わりにフォームモジュールの
コードを下記のように変更してください。(最後の Me.Hide を忘れないこと)
処理が短いのならこっちのほうがいいかも・・・

Private Sub UserForm_Activate()
  '*********ここからは実際の処理を記入(下のコードはダミーです)
  Dim i As Long
  Dim j As Long
  For i = 1 To 10000
    j = j * 1
    DoEvents
  Next
  '*********ここまで
  Me.Hide
End Sub

試してみてな。
ほな。

【4768】Re:マクロのuserformを全画面表示したい
発言  bykin  - 03/4/4(金) 20:12 -

引用なし
パスワード
   ありゃりゃ・・・
等幅にしたら改行が変になってもた(^^;;
すんまへーん。

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