Excel VBA - 事件更改不起作用

时间:2013-07-31 14:13:09

标签: excel vba events

我对VBA很陌生,但到目前为止我还是来了。直到这一刻,我仍然坚持这一挑战。

我的目标是从B,C,D或E列的单元格中的下拉菜单中选择百分比(10,90或100),当选择其中一个百分比时,我希望计算相同的单元格A列中所选值的百分比。

因此,当A列中的单元格值为“500”并且在C列的同一行中,我选择“90”,我希望将90替换为450(0.9 * 500)

这里给出的代码是我到目前为止所获得的代码,包括一些已经从另一个主题“借用”的代码。虽然它适用于新的,干净的Excel工作表,但它不适用于我希望它工作的文档。

你们中有些人有什么想法可以找到这个漏洞吗? (我甚至创建了一个只有任务的命令按钮:Application.EnableEvents = True)

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Whoa

If Not Intersect(Target, Range("B:D")) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = 90 Then Target.Value = 0.9 * Cells(Target, 1).Value
    ElseIf Target.Value = 10 Then Target.Value = 0.1 * Cells(Target, 1).Value
    ElseIf Target.Value = 100 Then Target.Value = Cells(Target, 1).Value
    Else
        MsgBox "Not a valid percentage"
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

3 个答案:

答案 0 :(得分:0)

听起来你想要Workbook_SheetChange事件。在VBA编辑器中将您的逻辑添加到ThisWorkbook。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox "Cell changed. Target: " & Target.Worksheet.Name & "!" & Target.Address
End Sub

将上述代码添加到ThisWorkbook工作簿中任何工作表上的更改都将触发该事件。

答案 1 :(得分:0)

你不需要VBA来做你所要求的。数据验证和公式将起作用:

Data Validation Example

答案 2 :(得分:0)

意味着你在application.enableevents = false时因错误而停止了,你再次运行了这个东西而没有在两者之间的application.enableevents = true ...

我实际上有一个按钮来解决这个问题,就在我调试代码时,或者在VB编辑器中,Ctrl + G,在即时窗口中,你可以编写application.enableevents = true