返回列表 上一主題 發帖

EXCEL 發出聲音

回復 20# 自我感覺良好
你是在Excel 應用程式的VBA

  Call sndPlaySound32(ActiveWorkbook.Path & "\LoadIt.WAV", 0)

TOP

Call sndPlaySound32(ActiveWorkbook.Path & "\LoadIt.WAV", 0)
Call sndPlaySound32(ActiveDocument.Path & "\LoadIt.WAV", 0)

excel跟word是不一樣的。
太感謝了
50 字節以內
不支持自定義 Discuz! 代碼

TOP

Option Explicit

'API Class to take care of playing the file
Public Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _
                        ByVal uFlags As Long) As Long

聲音檔是wav
若要用mp3
那要怎樣改?
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 23# 自我感覺良好
就在這主題理

TOP

回復 24# GBKEE
http://hi.baidu.com/_pt98/item/a65477da91588e36e1f46f17

找到這些想辦法要使用它
使用wav檔,檔案太大了。同樣的聲音mp3只要0.1就夠了


API播放WAV,AVI,MP3,MID(來自網絡)

1.avi

' In standard module:
Public Play As Boolean
Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As String, ByVal uReturnLength _
As Long, ByVal hwndCallback As Long) As Long
Private Returnstring As String

Sub AVI_Play()
Const FileName As String = "c:\mybestfile.avi"
If Dir(FileName) = "" Then Exit Sub
If Play Then AVI_Stop
Returnstring = Space(127)
mciSendString "open " & Chr(34) & FileName & Chr(34) _
& " type avivideo alias video", Returnstring, 127, 0
mciSendString "set video time format ms", Returnstring, 127, 0
mciSendString "play video from 0", Returnstring, 127, 0
Play = True
End Sub

Sub AVI_Stop()
mciSendString "close video", Returnstring, 127, 0
Play = False
End Sub

'In ThisWorkbook module:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Play Then AVI_Stop
End Sub

2.mp3

Option Explicit
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Function ConvShortFilename(ByVal strLongPath$) As String
    Dim strShortPath$
    If InStr(1, strLongPath, " ") Then
        strShortPath = String(LenB(strLongPath), Chr(0))
        GetShortPathName strLongPath, strShortPath, Len(strShortPath)
        ConvShortFilename = Left(strShortPath, InStr(1, strShortPath, Chr(0)) - 1)
    Else
        ConvShortFilename = strLongPath
    End If
End Function

Public Sub MMPlay(ByRef FileName As String)                           '
    FileName = ConvShortFilename(FileName)                            '
    mciSendString "close " & FileName, vbNullString, 0, 0
    mciSendString "open " & FileName, vbNullString, 0, 0
    mciSendString "play " & FileName, vbNullString, 0, 0
End Sub

Public Sub MMStop(ByRef FileName As String)
    FileName = ConvShortFilename(FileName)                            '
    mciSendString "stop " & FileName, vbNullString, 0, 0
    mciSendString "close " & FileName, vbNullString, 0, 0
End Sub

3.wav

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwflags As Long) As Long

Sub Warning()
  PlaySound ThisWorkbook.Path + "\Warning.wav", 0&, &H1
End Sub

4.mid
Public Declare Function mciExecute Lib "winmm.dll" Alias " mciExecute" (ByVal lpstrCommand As String) As Long

Private Sub play()
Dim ReturnValue As Long
ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID")
End Sub
50 字節以內
不支持自定義 Discuz! 代碼

TOP

我有個疑問
我在vba裡面用這個
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Function SndPlay(Pathname As String) As Long
SndPlay = sndPlaySound(Pathname, SND_ASYNC)
End Function

但是打開會一直叫,等他叫完才可以開始使用,是我哪邊寫錯還是缺了什麼嗎?

TOP

        靜思自在 : 人要自愛,才能愛普天下的人。
返回列表 上一主題