Excel VBA WorkBook_sheetchange 不起作用。

3

我无法在 Excel VBA(office 365)中运行我的代码。

我希望在用户或代码更改任何单元格后运行此代码:

`

Sub Workbook_SC()

Dim var1 As Double

Application.EnableEvents = False

Worksheets("GSCells").Cells(5, 4).Value = 22

Worksheets("GSCells").Cells(5, 5).GoalSeek Goal:=0, ChangingCell:=Worksheets("GSCells").Cells(5, 4)

var1 = Worksheets("GSCells").Cells(5, 4).Value

Worksheets("GSCells").Cells(10, 5).Value = var1

If var1 < 23 Then
    Worksheets("Best").Cells(24, 11).Value = 23
End If

If var1 > 45 Then
    Worksheets("Best").Cells(24, 11).Value = 45
End If

If var1 >= 23 And var1 <= 45 Then
    Worksheets("Best").Cells(24, 11).Value = var1
End If

Application.EnableEvents = True

End Sub

我根据这个论坛上的信息编写了此代码。 我将该代码放在Excel VBA中的'ThisWorkbook'中。 一开始,Sub被命名为Workbook_SheetChange(),但返回了一个错误("Procedure declaration does not match description of event or procedure having same name")。
更改名称为SC()后,该错误消失了。 尽管如此,每次我更改任何工作表上的任何值时,它都无法运行。
但是,如果我进入VBA并按F5,它就可以正常工作。
有人能帮忙吗?
非常感谢。

1
请查看此答案 - Mathieu Guindon
1
只是好奇... 为什么你使用 Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 而不是 Worksheet_Change(ByVal Target As Range)?此外,在处理工作表更改事件时,您需要稍微小心。您可能想查看此链接 - Siddharth Rout
简而言之,暂时忘记代码。你能用“语言”告诉我你究竟想要实现什么吗? - Siddharth Rout
1个回答

4
为了触发SheetChange()事件,重要的是在子例程的定义中拥有必需的参数。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

任何其他名称或参数列表都会导致错误或无事件触发,这两种情况你已经经历过了。

非常感谢您的帮助!!! 您能解释一下Sh(=Sheet)和Target(=Range?)是什么意思吗? - user3641311
3
在这个子程序中,您可以使用这些变量。sh将保存发生更改的工作表,而Target将保存发生更改的单元格范围。例如,您可以在其中执行以下代码:If Sh.Name =“Sheet1”Then Target.Value =“ No Changes Allowed”。因此,如果在Sheet1选项卡上检测到更改,则单元格将设置为值“不允许更改”(这将非常令人恼火)。 - JNevill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接