[[20041010163220]] 『モーダレスでメッセージを表示しながら閉じる』(コリアンダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『モーダレスでメッセージを表示しながら閉じる』(コリアンダ)

[モーダレスでメッセージを表示しながらブックを閉じたい]

マクロでブックを閉じるときに「保存しています」というようなメッセージを出したいのです。モーダレスにするために CloseForm.show 0として次の行にブックを保存するコードを書いたのですが、フォームがきちんと表示されずに、枠とタイトルバーだけ表示された状態で保存が始まってしまいます。表示のための時間が足りないんでしょうか。どうすればいいでしょうか。

Excel2000
Windows2000


 >モーダレスにするために
 モーダルで表示してあるフォームをモーダレスに換えるっちゅうことでっか?
 unload me か me.hideを先に書かんかったらアカンと思いまんねんけど?
 で、新たにuserform.show 0 と書いて試してみてくらはい。(色々組み合わせて)
     (弥太郎) 

 こんばんは!コリアンダさん!
一応作ってみましたので、後は適当に応用してください。
下に、アップしています。v(=∩_∩=)v
Const MyCont = 3000を大きくすれば長くなります。
URLを右くりっくして「対象ファイルを保存してからお試しください。」
(SoulMan)
Sub テスト()
Const MyCont = 3000
    Dim i As Long, MyStr As Long
        UserForm1.Show vbModeless
            For i = 1 To MyCont
                MyStr = i / MyCont * 20
                UserForm1.Label1.Caption = String(MyStr, "■")
                DoEvents
            Next
        ThisWorkbook.Saved = True
    Application.Quit
End Sub
Private Sub Auto_Close()
    Unload UserForm1
End Sub
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0092.xls


 SoulManさんので解決していると思いますが、
 プログレスバーについてはマイクロソフトへのリンクが↓にあります。
 (ramrun)

[[20030627151504]] 『マクロ実行中から一時中断』(こばちゃん)


サンプルまで用意してくださってありがとうございました。これこそ私が願っていたことです。いろいろ勉強になりました。
勉強のためにお尋ねしてもいいですか。フォームをモーダレスにした後は他のオブジェクトにフォーカスを移してはいけないということでしょうか。それからブックを閉じる場合でもunloadしたほうがいいのですか。(コリアンダ)


 おはようございます。
ほめられるとすぐに調子にのるのが私の悪い癖でしてぇ。。
パートつぅを作っちゃいましたぁ(^^;)
とかなんとか言いながら自分も使おうかなぁ。と思って
それから、私は基本的にマクロの記録をちょこちょこっと編集してる程度の凡人なので
専門的な知識はないんです。( ̄□ ̄;)!!
詳しい技術的なことは他に詳しい先生方が沢山いらっしゃいますのでお任せします。
でも、unloadはした方がいいんじゃないかと個人的には思います。
ではでは、、v(=∩_∩=)v
URLを右くりっくして「対象ファイルを保存してからお試しください。」
(SoulMan)
Sub テスト()
Const MyCount = 10000
Dim i As Long, MyWideA As Single, MyWideB As Single
With UserForm1
    .Show vbModeless
    MyWideA = .Image1.Width
    For i = 1 To MyCount
        MyWideB = MyWideA * (i / MyCount)
        With .Image2
            .Width = MyWideB
            If .Visible = False Then
                .Visible = True
            End If
        End With
        .Label2.Caption = Int(i / MyCount * 100) & "%"
        .Repaint
    Next
End With
    ThisWorkbook.Saved = True
    Application.Quit
End Sub
Private Sub Auto_Close()
    Unload UserForm1
End Sub
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0093.xls


 プログレスバーのような経過を表示させるには、
 for〜nextのループ文のような繰り返し処理や段階のある処理
 でないと経過は表示できません。

 >マクロでブックを閉じるときに「保存しています」というようなメッセージを出したい
 保存などの(saveメソッド)1命令による処理で時間がかかる場合には
 プログレスバーのような経過は表示できないので、
 メッセージを表示しておくしかできないですね。

 >フォームがきちんと表示されずに、枠とタイトルバーだけ表示された状態で
 >保存が始まってしまいます。
 モーダル、モードレスのどちらでも処理できます。 
 今回の場合は、メッセージ表示なのでモーダルの方が良いと思います。

 Sub sample()
     UserForm1.Show
 End Sub

 [UserForm1モジュール]
 Private Sub UserForm_Activate()
    Me.Repaint 
    ThisWorkbook.Close True
 End Sub 

 ユーザーフォーム表示中の処理は、
 ユーザーフォームモジュールにコードを記述する方が
 分かり易くて良いと思います。 

   (INA)


INAさんの言うとおりですね。確かに1コマンド中にどうやって
プログレス表示できるのか疑問に思っていました。ユーザーフォームに
コマンドを記述すればフォーカスを移さずに実行できますし、スマートですね。
ともあれ、私はSoulManさんの情熱にも敬服しています。プログレスバーの進行中に
実際にはバックグラウンドで何も行なわれていないとしても(?)、
あれだけ凝ることができるなんて。。。マクロにかけるロマンを見たような気が
しました。ありがとうございました。
(コリアンダ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.