• 締切済み

エクセル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

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

  • エクセル VBA MsgBox

    1)下記の記述だと コンボが空白ならエラー表示が出て Okをクリックすると ”記録しますか?” となります! そこをエラー表示されたら UserFormに戻り 空白が無くなったら ”記録しますか?” というMegBoxにしたいのですが どう変化すれば良いのでしょうか? 教えて下さい! Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 10 If Controls("ComboBox" & i).Text = "" Then MsgBox "選択されていません確認して下さい!", vbInformation, "良く見て下さい!" Exit For End If Next If MsgBox("記録しますか?", vbOKCancel) = vbOK Then With UesrForm From.TextBox1 = Val(UesrFrom.ComboBox1) + _ Val(UesrFrom.ComboBox2) + Val(UesrFrom.ComboBox3) + _ Val(UesrFrom.ComboBox4) + Val(UesrFrom.ComboBox5) From.TextBox2 = Val(UesrFrom.ComboBox6) + _ Val(UesrFrom.ComboBox7) + Val(UesrFrom.ComboBox8) + _ Val(UesrFrom.ComboBox9) + Val(UesrFrom.ComboBox10) End With MsgBox " 記録します!" Unload Me Else MsgBox " キャンセル!!" End If End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • エクセル2007のVBAについて

    VBA初心者ですが、よろしくお願いします。 エクセルで入力したいシートタブを右クリック、コードの表示で、 VBAに以下のスクリプトを入力しました。 ネットに紹介されていたスクリプトに自分で一部書き足したものです。 U列に値が入っていれば、その行のT列をダブルクリックするとチェックマークがつくようにし、 それをU列の最終行までループしたいのですが、エラーなどはなくチェックマークが出現しません。 どこが間違っているのでしょうか?ご教授お願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MaxRow = Range("U65536").End(xlUp).Row For i = 1 To MaxRow Step 1 If Range("U" & i) <> Null Then If Intersect(Target, Range("T" & i)) Is Nothing = False Then Cancel = True If Target.Value = ChrW(10003) Then Target.ClearContents Else Target.Value = ChrW(10003) End If End If End If Next i End Sub

  • エクセルVBAのイベントで質問です。

    ダブルクリックイベントで、G12:G31の範囲の文字列をB10:B27の範囲(最下行)に入れていくものを使っていますが、新たにH12:H31にある文字列もダブルクリックするとC10:C27の範囲(最下行)に入れていけるようにしたいと思います。 どのようにすればいいでしょうか。 ご存知の方いらっしゃればお教えいただけると助かります。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, _ Cancel As Boolean) Dim i As Long Dim flg As Boolean If Intersect(Target, Range("G12:G31")) Is Nothing Then Exit Sub If IsEmpty(Target.Value) Then Exit Sub With Worksheets("シートA") For i = 10 To 27 If .Range("B" & i).Value = "" Then .Range("B" & i).Value = Target.Value flg = True Exit For End If Next i If flg = False Then MsgBox .Name & " がいっぱいです。" End If End With Cancel = True End Sub

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • VBA MsgBOXでの処理分岐

    B列に抹消と入力したら別の列に抹消と記載する以下のマクロがありますが、 B列に抹消と入力したらMsgBoxで抹消しますか?と表示させたいです。 MsgBox関数を特定場所に挿入したのですが、うまくいかず、どこに挿入したらよろしいでしょうか。(オブジェクトが必要です。のエラーが出てしまう状況です。) Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim h As Range On Error Resume Next For Each h In Application.Intersect(Target, Range("B:B")) If h = "抹消" Then Cells(h.Row, "E").Resize(1, 7).SpecialCells(xlCellTypeConstants) = "抹消" End If Next End Sub

  • エクセル VBA について

    エクセルで、 ダブルクリックしたら"*"を表示したい範囲に【入力】という名前をつけ、 ダブルクリックしたら9つ左のセルの内容を表示したい範囲に【金額】という名前をつけ、 二つの構文?をVisual Basicに作成したんですが、エラーが出てしまいます。 ひとつずつだと上手くいくのですが、なぜでしょうか? わかる方教えてください。 あと申し訳ないのですが、VBAはまったくわからないため、ネット上で構文をコピーして貼り付けました。 そんな者でもわかる修正の説明をお願いいたします。 以下が作成し、エラーとなってしまう構文です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "金額" If Target.Value = "" Then Target.Value = Target.Offset(0, -9).Value Cancel = True End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "入力" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "*" Then Target = "" Else Target = "*" End If End If End Sub

専門家に質問してみよう