Board logo

標題: [發問] 偵錯沒問題,就是無法執行 [打印本頁]

作者: wells330    時間: 2011-4-29 08:24     標題: 偵錯沒問題,就是無法執行

各位前輩大家好!
       可以幫忙看一下這巨集哪裡有錯誤嗎?
       這是我在舊論壇裡找到的應用,用Office2000和Office2010都沒辦法順利執行,
       音效檔案測試也沒問題,按F8偵錯也沒問題,就是發不出聲音,
       是否需要修改的地方請各位前輩指正.

         謝謝!   

Private Sub Worksheet_Calculate()

    Dim spath As String, cmd As String
  
    If Range("A1").Value <= Range("B1").Value Then
  
    spath = "C:\op.wav"
  
        cmd = "sndrec32 /play /close " & Chr(34) & spath & Chr(34)
   
        Shell cmd, 6
   
    End If
  
End Sub
作者: chin15    時間: 2011-4-29 08:51

用錄音程式播放音樂還是頭一次看到
使用Wimm.dll應該純淨點,也可避免版本衝突
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrcommand As String) As Long
Private Const Mic = "c:\op.wav"
Sub op()
mciExecute ("play " & Mic)
End Sub
作者: wells330    時間: 2011-4-29 10:03

大家好!
本來是想用我在舊論壇裡找到的應用,加以修改再使用,現在應直接說明想達成的效果。
我想做的是:
1.如:當 A1>A2 時;自動撥放 C:\168.WAV、當 B1=>B2 時;自動撥放 C:\258.WAV........不同條件可播放指定音效。
2.當條件成立時所設定的聲音播放2次然後自動停止,除非條件又再次成立。
3.巨集有START、STOP按鍵。

  謝謝!      感恩
作者: hugh0620    時間: 2011-4-29 13:21

回復 3# wells330


    可否附上您的test檔~ 這樣比較能夠討論到~ 為什麼會有問題~
作者: wells330    時間: 2011-4-29 21:51

檔案已上傳;麻煩各位前輩了。:)

   謝謝!
[attach]5908[/attach]
作者: Hsieh    時間: 2011-4-29 23:59

回復 5# wells330

放錯工作表模組
作者: wells330    時間: 2011-4-30 09:46

Hsieh版主你好!
     已修正;出現以下錯誤麻煩指正       謝謝![attach]5916[/attach]
[attach]5914[/attach]
作者: chin15    時間: 2011-4-30 20:38

我測試能通過,也許你的路徑檔案不存在。
作者: Hsieh    時間: 2011-5-1 00:09

WINDWOS 錄音機
C:\Windows\system32\SoundRecorder.exe
但是,錄音機能用來播放音效嗎?
作者: wells330    時間: 2011-5-1 22:57

大家好!
真的是好手雲集!小弟先謝謝各位
       先回覆Hsieh超級版主:W7的錄音機真的只能用來錄音,不能播放音效(作業系統;EXCEL版本的不同弄的......。)你的細心我會多加學習。
        chin15大大妳好!妳建議的巨集我有試過OK有聲音,但我真不之從何修改起?請各位前輩幫幫忙!
       1.我有許多動態資料會進來作比對動作,如:當 A1>A2 時;自動撥放 C:\168.WAV、
          當 B1=>B2 時;自動撥放 C:\258.WAV........不同條件可播放指定音效
       2.當條件成立時所設定的聲音播放1次然後自動停止,除非條件又再次成立。
       3.巨集有START、STOP按鍵。
                        謝謝!      感恩

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrcommand As String) As Long
Private Const Mic = "c:\op.wav"
Sub op()
mciExecute ("play " & Mic)
End Sub
作者: oobird    時間: 2011-5-1 23:22

1.我有許多動態資料會進來作比對動作,如:當 A1>A2 時;自動撥放 C:\168.WAV、
          當 B1=>B2 時;自動撥放 C:\258.WAV........不同條件可播放指定音效。
問題在這裡,一個"如"字,讓想幫你的人都不知如何幫了。
總共幾個條件?若兩筆以上條件同時成立的又該如何?
作者: luhpro    時間: 2011-5-1 23:28

本帖最後由 luhpro 於 2011-5-1 23:29 編輯

兩個方式提供給你參考 :
1. 開 DOS 視窗, 把下列內容貼上去後按 Enter 執行看看
sndrec32 /play /close C:\op.wav

如果出現 "找不到檔案" 的錯誤訊息,
很可能是 sndrec32.exe 不在程式的預設目錄內, (也有可能是你執行該檔案的權限不足)
試著把它放到 C:\Windows\system32 下(或是DOS視窗中打 set path 中所出現的任一目錄內)

2. 同樣開 DOS 視窗, 把下列內容貼上去後按 Enter 執行看看
dir C:\op.wav
如果出現 "找不到檔案" 的錯誤訊息,
表示該聲音檔不在 C:\ 目錄內,
也有可能是你的權限不足無法播放,
開 DOS 視窗, 打下列指令後再執行 Excel 檔案試試 :
copy C:\op.wav

基本上你會用到的應該就是這兩個檔案.
作者: wells330    時間: 2011-5-2 08:10

樓上所提都沒問題。
謝謝!
作者: wells330    時間: 2011-5-2 09:44

oobird超級版主你好!很抱歉!
       1.許多動態資料會進來作比對動作
          當 A1=>A2 時;自動撥放 C:\168.WAV
          當 B1=>B2 時;自動撥放 C:\268.WAV
          當 C1=>C2 時;自動撥放 C:\368.WAV不同條件可播放指定音效。
       2.當條件成立時所設定的聲音播放1次然後自動停止,除非條件又再次成立。
          不管一筆或多筆都成立,照常播放聲音
       3.巨集設有START、STOP執行與停止按鍵。
                        感謝!
作者: Hsieh    時間: 2011-5-2 22:16

播放曲目的對應寫在第3列
[attach]5945[/attach]
附件請解壓縮到電腦後再開啟
一般模組
  1. Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrcommand As String) As Long
  2. Sub op(mypath)
  3. On Error Resume Next
  4. mciExecute "play " & mypath
  5. End Sub
複製代碼
工作表模組
  1. Private Sub Worksheet_Calculate()
  2. For Each a In [B1:D1]
  3.    If a > a.Offset(1, 0) Then
  4.       mypath = ThisWorkbook.Path & "\" & a.Offset(2, 0)
  5. Application.OnTime Now + TimeValue("00:00:03") * i, "'op " & Chr(34) & mypath & Chr(34) & "'"
  6. i = i + 1
  7. Application.OnTime Now + TimeValue("00:00:03") * i, "'op " & Chr(34) & mypath & Chr(34) & "'"
  8. i = i + 1
  9.     End If
  10. Next
  11. End Sub
複製代碼
[attach]5946[/attach]
作者: wells330    時間: 2011-5-2 23:46

Hsieh超級版主謝謝你!
       因權限不夠無法下載,請問儲存格裡有公式嗎?
       "播放曲目的對應寫在第3列"是要如何崁入?

       感恩!
作者: Hsieh    時間: 2011-5-3 00:02

B1:D2我用RANDBETWEEN函數
第三列就直接輸入該欄條件成立要播放的曲目
按F9重算就會播放
作者: Hsieh    時間: 2011-5-3 11:45

本帖最後由 Hsieh 於 2011-5-3 22:32 編輯

另一個API函數用法sndPlaySound
一般模組
  1.       Private Declare Function sndPlaySound Lib "winmm.dll" Alias _
  2.       "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  3.       Function SndPlay(Pathname As String) As Long
  4.           SndPlay = sndPlaySound(Pathname, SND_ASYNC)
  5.       End Function
複製代碼
工作表模組
  1. Private Sub Worksheet_Calculate()
  2. For Each a In [B1:D1]
  3.    If a > a.Offset(1, 0) Then
  4.       mypath = ThisWorkbook.Path & "\" & a.Offset(2, 0)
  5. Application.OnTime Now + TimeValue("00:00:03") * i, "'SndPlay " & Chr(34) & mypath & Chr(34) & "'"
  6. i = i + 1
  7. Application.OnTime Now + TimeValue("00:00:03") * i, "'SndPlay " & Chr(34) & mypath & Chr(34) & "'"
  8. i = i + 1
  9.     End If
  10. Next
  11. End Sub
複製代碼
B1:D2輸入公式
=RAND()
B3:D3輸入音效檔名(含副檔名)
按F9重算
WIN XP+2003版
WIN 7+2010版
測試通過
[attach]5948[/attach]
作者: wells330    時間: 2011-5-5 08:29

Hsieh超級版主你好!
     感謝你多次幫忙!
B12輸入公式=RAND()      假設B1是連結A5的資料應如何寫?
B33輸入音效檔名(含副檔名)     假設B3 = "C:\op.wav"  是這樣寫嗎?

當有另一組=<時請問巨集該如何修正?
          當 E1=<E2 時;自動撥放 C:\222.WAV
          當 F1=<F2 時;自動撥放 C:\333.WAV
          當 G1=<G2 時;自動撥放 C:\444.WAV不同條件可播放指定音效。
感恩!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)