• 締切済み

エクセル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 だと思うんですが、二つを混ぜてするにはどうするのでしょうか?教えてください 

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

掲載したマクロは微妙に変ですね。まず 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

kamedon
質問者

お礼

ありがとうございます。とても役に立ちました。頭 下がる思いです。天才ですね ではでは

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

こんにちは。 >エクセル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、のところが秒数です。 以上です。

kamedon
質問者

お礼

 簡潔にまとめられていて、凄いですね!天才です!ありがとうございました やってみます ではでは

関連するQ&A