- 締切済み
エクセルVBA MSGBOXを30秒間出したい それをUWSCソフトで監視して命令を出したい
エクセルでI列に値が入力されていて、その値が変わればMSGBOXを30秒間だけ出すようにしたいが、どうすればいいんでしょうか?MSGBOXの中身は ”BUY""SELL"で Private Sub Worksheet_Change (By Val Target As Range) If Target.Column="I"Then Msgbox"buy""sell" End IF End Sub これでは、表示されません どう改良するんでしょうか? あと、30秒間だけ表示させるには、 option explicit public declare function gettickcout lib "kernel132"()As long で証明?して DimStartTime DimNowTime StartTim=GetTickCount MyMsgbox.Show0 DoWhileNowTime-StartTime<3000 NowTime=GetTickCount Do Event Loop Unload My Msgbox End sub だと思うんですが、二つを混ぜてするにはどうするのでしょうか?教えてください
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- zap35
- ベストアンサー率44% (1383/3079)
掲載したマクロは微妙に変ですね。まず If Target.Column="I"Then では、Columnプロパティは列番号を返しますので、ここは数字を書きます。 次に MyMsgbox.Show とありますので、Msgboxメソッドではなく、ユーザーフォームを使っているように思います。 またGetTickCountはミリセカンド単位で秒を取得しますので、間違いではありませんが使う必要もないと思います。 まずUserFormを新規作成し、その上にLabel1を定義しておきます。 UserForm1右クリック→コードの表示で開く画面に次のマクロを貼り付けます。 Private Sub UserForm_Activate() Dim sTime sTime = Time UserForm1.Label1.Caption = "30秒後に閉じます" UserForm1.Repaint Do While Time - sTime < TimeValue("00:00:30") DoEvents Loop Unload Me End Sub 次に入力シートのシート名右クリック→コードの表示で開く画面に以下のマクロを貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 9 Then UserForm1.Show End If End Sub
- onlyrom
- ベストアンサー率59% (228/384)
こんにちは。 >エクセルVBA MSGBOXを30秒間出したい >それをUWSCソフトで監視して命令を出したい このうちのUWSCソフトなどというものはとんと知識なしですので MsgBoxの方だけ、一案。 Sheet1のI列に変化があったとき、5秒間メッセージを表示する場合。 Sheet1のシートモジュールに以下をコピペ。 '------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim myPop As Object If Target.Column <> 9 Then Exit Sub Set myPop = CreateObject("Wscript.Shell") myPop.PopUp "ここにメッセジの内容", 5, "ここにタイトル" Set myPop = Nothing End Sub '---------------------------------------------- 上記PopUpの数値、5、のところが秒数です。 以上です。
お礼
簡潔にまとめられていて、凄いですね!天才です!ありがとうございました やってみます ではでは
お礼
ありがとうございます。とても役に立ちました。頭 下がる思いです。天才ですね ではでは