我目前有这个代码:
Option Explicit
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Dim CheckRange As Range
Dim PlaySound As Boolean
Set CheckRange = Range("C:C")
For Each Cell In CheckRange
If Cell.Value = "#N/A" Then
PlaySound = True
End If
Next
If PlaySound Then
Call sndPlaySound32("C:\windows\media\chord.wav", 1)
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我试图得到它,以便如果C列中有错误,播放声音,但它不起作用,任何想法?
您不需要API
你也可以使用Beep
.
Sub Sample()
Beep
End Sub
Run Code Online (Sandbox Code Playgroud)
例
方式1
如果工作表中的任何位置发生更改,则将运行此代码
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Dim CheckRange As Range
Set CheckRange = Range("C:C")
For Each Cell In CheckRange
If Cell.Text = "#N/A" Then
Beep
Exit For
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
方式2
上述代码的替代方案
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Columns(3)
On Error Resume Next
If CVErr(Cell) = CVErr(2042) Then
Beep
Exit For
End If
On Error GoTo 0
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
方式3
如果您希望仅在Col C中的任何位置进行手动更改时检查Col C.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Columns(3)) Is Nothing Then
For Each Cell In Columns(3)
On Error Resume Next
If CVErr(Cell) = CVErr(2042) Then
Beep
Exit For
End If
On Error GoTo 0
Next
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
方式4
如果您希望在该单元格中进行手动更改时检查特定单元格
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Columns(3)) Is Nothing Then
On Error Resume Next
If CVErr(Target) = CVErr(2042) Then
Beep
Exit Sub
End If
On Error GoTo 0
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
方式5
方式4的变化
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Columns(3)) Is Nothing Then
If Target.Text = "#N/A" Then
Beep
Exit Sub
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
关注(发表评论)
活动单元格将在b列中,因此它应该在列d - Sam Cousins 1分钟前检查一个
我猜你的意思是Col C而不是Col D.你必须使用Worksheet_SelectionChange
它
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Columns(2)) Is Nothing Then
If Target.Offset(, 1).Text = "#N/A" Then
Beep
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 5
只需粘贴以下代码并运行并查看它是否有效...
Option Explicit
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
Dim PlaySound As Boolean
If Target.Column = 3 Then
For Each Cell In Target
If WorksheetFunction.IsNA(Cell.Value) Then
PlaySound = True
End If
Next
If PlaySound Then
Call sndPlaySound32("C:\windows\media\chord.wav", 1)
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)