返回列表 上一主題 發帖

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

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

各位前輩大家好!
       可以幫忙看一下這巨集哪裡有錯誤嗎?
       這是我在舊論壇裡找到的應用,用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
50 字節以內
不支持自定義 Discuz! 代碼

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

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

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

TOP

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

       感恩!
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

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

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

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

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

TOP

        靜思自在 : 不要隨心所欲,要隨心教育自己。
返回列表 上一主題