VBA Excel - Workbook_SheetChange

时间:2013-11-02 03:50:14

标签: excel vba excel-vba

希望这个问题还没有被问到,我试着找一个答案而找不到任何东西。

这可能是一个简单的问题,但是我在excel中编写我的第一个宏,并且遇到了一个我无法找到解决方案的问题。我写了几个宏,基本上根据同一行的另一列中的值动态地总结列(以便行数可以更改,公式自动向下移动),我从事件{{调用这些宏1}}。

我遇到的问题是,我从宏中更改单元格的值以显示总和的结果,然后再次调用Workbook_SheetChange,这是我不想要的。现在它可以工作,但我可以跟踪它,并看到多次调用Workbook_SheetChange。这阻止了我向宏添加其他单元格更改,因为它会导致无限循环。

我希望每次对工作表进行更改时都会运行宏,但我没有看到任何方法允许宏更改单元格的值,所以我不知道该怎么做。我会在下面粘贴我的代码,以防有用。

Workbook_SheetChange

感谢您给我的任何帮助!我真的很感激。

1 个答案:

答案 0 :(得分:5)

使用Application.EnableEvents阻止Excel调用事件过程。

穿戴 代码开头的Application.ScreenUpdating = False 最后是Application.ScreenUpdating = True

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    Dim Row As Long
    Dim Col As Long
    Row = Target.Row
    Col = Target.Column
    If Col <> 7 Then
        Range("G" & Row).Select
        Selection.Formula = "=IF(F" & Row & "=""Win"",E" & Row & ",IF(F" & Row & "=""Loss"",-D" & Row & ",0))"
        Target.Select
    End If
    Call SumRiskColumn
    Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Application.EnableEvents = False
    Call SumOutcomeColumn
     Application.EnableEvents = True
End Sub