プロが教えるわが家の防犯対策術!

以前下記のようなVBAを教えていただきました。
セルに違う値が入った時1回だけビ-プ音がなります。
この音を3回ほど繰り返すかもっと注意喚起できる音にしたいのですが、どこ
をどう変更すればいいのでしょうか?エクセルのVBAに詳しい方がいらっしゃたらお教え願います。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 1 Then
If .Value <> .Offset(-1) Then
Beep
End If
End If
End With
End Sub

A 回答 (7件)

余計なことかもしれませんが、難しく考え過ぎではありませんか?


Sound API を使っても構わないとは思いますが、
基本的には、Beep が専有している状態で次の命令をしても、Beepの始動は起こらないということです。だから、Beep をとんでもなく重ねても一回しか音がならないわけです。
ただ、以下の場合は、Windowsの◎のぐるぐるが出ますね。一旦、これは、外部に渡したほうが良いかもしれません。

'//
Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
 With Target
   If .Row > 1 Then
    If .Value <> .Offset(-1) Then
    For i = 1 To 3 '回数
     Application.Wait Now + TimeValue("00:00:01")
     Beep
    Next
    End If
   End If
 End With
End Sub

'//
#5のGooUserラックさんの C:\Windows\Media\tada.wavは、指定しなくても、
MessageBeepを使えば良かったはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。3回なりました。確かにぐるぐるが出ますが
外部に渡すの意味が分かりません。スキル不足で申し訳ありません。

お礼日時:2018/03/02 12:01

下記のサイトが引用元です。


http://www.start-macro.com/55/w/s077.html

以下のようにしてください。
1.標準モジュールに以下のマクロを登録する。
----------------------------------------------
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
'周波数:大きい数字になるほど高音
'作動時間:単位:1ミリ秒
Sub MyBeep(周波数 As Long, 作動時間 As Long)
Call BeepAPI(周波数, 作動時間)
End Sub
-----------------------------------------------

2.あなたが提示したマクロのBeepを
call MyBeep(600,1000)
のように変える。

最初の数字(600)が、音の高さです。
次の数字(1000)が音のなる時間です。(1000ミリ秒=1秒)
上記の数字をいろいろ変えて、あなたが納得する値を決めてください。
テスト時は、いきなり大きな音が出る可能性があるので、最初はボリュームを小さくして行ってください。
    • good
    • 0
この回答へのお礼

ありがとうございます。お教え頂いたURLのページは以前参考にしましたが
私には敷居が高かったです。もっと勉強したいと思います。重ねてお礼申し上げます。

お礼日時:2018/03/02 11:54

No.4 のお礼について



Sample1()の方で、確実に音ファイルが有るなら
「Beep」を「Shell "mplay32.exe /play /close C:\Windows\Media\tada.wav"」に変更するだけです。
もちろん「C:\Windows\Media\tada.wav」は好きなサウンドファイルに変更してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。こんな構文で音が出るのですね。勉強になりました。御礼もうします。

お礼日時:2018/03/02 11:49

「○○.wav」の音を出したいのならば以下が参考になると思います。


https://www.moug.net/tech/exvba/0150122.html
    • good
    • 0
この回答へのお礼

ありがとうございます。確かに音はでるようですが上記の構文にどう組み込めばいいのか分かりません。当方は上記構文のBEEP音を大きくするか繰り返して注意喚起したいのです。重ねてお礼申し上げます。

お礼日時:2018/03/01 16:42

こんにちは!



Beep音にこだわっていらっしゃるようですが、
別案として・・・
メッセージボックスを表示させる方法はどうでしょうか?
(メッセージボックスを消すのにEnterキーを押下またはクリックする手間が増えます。)

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 1 Then
If .Value <> .Offset(-1) Then
MsgBox "データ違い", vbExclamation
End If
End If
End With
End Sub

これでメッセージと「音」で注意喚起?ができます。m(_ _)m
    • good
    • 0
この回答へのお礼

tomo04様。ありがとうございます。凄いですね。こんな事も出来るんですね。
beep音にこだわりはありませんが教えて頂いたVBAがbbep音だったもので。
現場でバ-コ-ドをリ-ダ-で読み込み異品混入時に作業者が気付く様に大きな音が欲しいのです。WAV
でも何でも構いません。もちろんBEEPの繰り返しでもいいのですが。

お礼日時:2018/03/01 16:16

Private Sub Worksheet_Change(ByVal Target As Range)


If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 1 Then
If .Value <> .Offset(-1) Then
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
Beep
End If
End If
End With
End Sub

で、いいんじゃない?
    • good
    • 0
この回答へのお礼

ありがとうございます。試してみましたが繰り返しません。同じ様に1回でした。

お礼日時:2018/03/01 16:09

then


beep
beep
beep
とか?
    • good
    • 0
この回答へのお礼

ありがとうございます。やはり1回しかなりません。

お礼日時:2018/03/01 16:11

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