プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/17 13:59

こんにちは。


>エクセル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、のところが秒数です。

以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/17 14:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!