返回列表 上一主題 發帖

[發問] 偵錯沒問題,就是無法執行

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

TOP

本帖最後由 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

基本上你會用到的應該就是這兩個檔案.

TOP

樓上所提都沒問題。
謝謝!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

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

TOP

播放曲目的對應寫在第3列

附件請解壓縮到電腦後再開啟
一般模組
  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
複製代碼
PlaySound.rar (90.72 KB)
學海無涯_不恥下問

TOP

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

       感恩!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

B1:D2我用RANDBETWEEN函數
第三列就直接輸入該欄條件成立要播放的曲目
按F9重算就會播放
學海無涯_不恥下問

TOP

本帖最後由 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版
測試通過
PlaySound.zip (85.04 KB)
學海無涯_不恥下問

TOP

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不同條件可播放指定音效。
感恩!
50 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題