Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么VBA代码会给我一个“变量未定义”错误?_Excel_Vba_Function_Collections_Playsound - Fatal编程技术网

Excel 为什么VBA代码会给我一个“变量未定义”错误?

Excel 为什么VBA代码会给我一个“变量未定义”错误?,excel,vba,function,collections,playsound,Excel,Vba,Function,Collections,Playsound,几天前我发了一篇类似的帖子,得到了一些很好的建议/帮助,但我的代码似乎仍然不能正常运行。作为参考,我正在运行64位Excel,我的所有代码都包含在同一个模块中 我正在尝试创建一个函数,该函数将读取单元格的值,并播放与该值关联的特定WAV文件。例如,如果函数读取1,它将播放Amaj.wav,如果播放2,它将播放Amin.wav,依此类推。我的所有WAV文件都存储在与工作簿相同的目录中。以下是我当前的代码,摘自我上一篇文章的答案: Option Explicit Private Declare P

几天前我发了一篇类似的帖子,得到了一些很好的建议/帮助,但我的代码似乎仍然不能正常运行。作为参考,我正在运行64位Excel,我的所有代码都包含在同一个模块中

我正在尝试创建一个函数,该函数将读取单元格的值,并播放与该值关联的特定WAV文件。例如,如果函数读取1,它将播放Amaj.wav,如果播放2,它将播放Amin.wav,依此类推。我的所有WAV文件都存储在与工作簿相同的目录中。以下是我当前的代码,摘自我上一篇文章的答案:

Option Explicit

Private Declare PtrSafe Function PlaySound Lib "winmm.dll" _
                Alias "PlaySoundA" (ByVal lpszName As String, _
                 ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private ChordDict As New Collection
出于某种原因,每当我尝试在Excel工作簿中运行Sound函数时,都会收到一条编译错误消息:variable not defined(变量未定义)。高亮显示的行是函数SoundCell,长度为。有人对如何让代码按预期运行有什么建议吗?谢谢。

固定功能

Function Sound(Cell As Long)
    Dim WAVFile As String, SoundFile As String, i as long
    Const SND_ASYNC = &H1
    Const SND_FILENAME = &H200000

    For i = 1 To ChordDict.count
        If i = Cell Then
            SoundFile = ChordDict(i)
            WAVFile = ThisWorkbook.path & "\" & SoundFile
            Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)
            Exit Function
        End If
    Next
End Function

我看了另一个帖子。您需要在函数Sound中声明i。如果在运行代码之前运行Debug/Compile,右边的一行将突出显示。是否接受@Storax的答案???非常感谢@Storax!我的功能现在很好
Function Sound(Cell As Long)
    Dim WAVFile As String, SoundFile As String
    Const SND_ASYNC = &H1
    Const SND_FILENAME = &H200000

    For i = 1 To ChordDict.Count
        If i = Cell Then
            SoundFile = ChordDict(i)
Function Sound(Cell As Long)
    Dim WAVFile As String, SoundFile As String, i as long
    Const SND_ASYNC = &H1
    Const SND_FILENAME = &H200000

    For i = 1 To ChordDict.count
        If i = Cell Then
            SoundFile = ChordDict(i)
            WAVFile = ThisWorkbook.path & "\" & SoundFile
            Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)
            Exit Function
        End If
    Next
End Function