2017-09-14 61 views
1

背景:Worksheet_SelectionChange不执行所需的任务

我似乎不知道我有SelectionChange做的和想一些帮助,以确保我正确地使用它。

我右键单击当前工作簿,在VBA窗口,选择查看代码。我在那个领域有我的代码。在即时窗口(CTRL + G),我输入:

Application.EnableEvents=True 

代码:

我使用测试的代码应该在显示目标行/列一个细胞(1,1):

Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim r, c As Integer 
    If Selection.Count = 1 Then 
     c = Target.Column 
     r = Target.Row 
     Cells(1, 1).Value = "Cells(" & r & ", " & c & ")" 
    End If 
End Sub 

问题:

我是否缺少启用选择更改事件的内容?

+1

在ThisWorkbook中,正确的名称是'Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)'。您可以从VBE顶部的下拉列表中找到所有名称。如果您希望将其应用于单张纸,请将其添加到工作表模块。 – SJR

+0

@SJR在纠正名称和一些玩弄后,这似乎是类似于调整变化事件,其中活动单元(选择)的改变不是触发器,但是进入单元格以编辑字符串是触发器。你用正确的名字回答了我发布的问题。将期待单独发布我的关于功能的其他问题。谢谢! – Cyril

+0

它应该由被选中的单元触发,而不必编辑它。它与正常的图纸级选择更改事件应该没有区别,唯一的区别是您可以指定应用的工作表。 – SJR

回答

3

如果你右击的ThisWorkbook并选择查看代码你会看到两个下拉菜单的代码窗口上方。最左边的允许您选择(一般)或工作簿。如果选择“工作簿”,则最右侧的下拉菜单将提供可以在工作簿级别使用的所有事件。 Worksheet_SelectionChange不存在,因为它不是Workbook级别的事件。

工作簿级事件包括像打开关闭SheetChange事件。注意:SheetChange在用户更改所选工作表时触发,而不会更改给定工作表。

如果你这样做相同,但与工作表Sheet1 (Sheet1中)对象,最左边的下拉菜单会显示(一般)和工作表。选择此项将提供工作表级别的可用事件。选择SelectionChange并且VBE会自动创建事件的外壳,随时为您填充代码。

请注意,如果您在添加了代码的工作表上更改了某个单元格,则该事件仅会触发,因此请在创建事件时记住这一点。

+1

这个。 **绝不**手动输入事件处理程序签名或粘贴它们。除非您完全知道**您正在做什么,并且您知道并记住事件的确切名称和事件提供程序接口,如以及签名中每个参数的数量,类型和顺序(注意,名称无关紧要)。处理程序总是被命名为'Interface_EventName',接口实现也是''Interface_MemberName''。顺便说一句,这就是为什么你不应该在你的方法名称中有下划线。 –

+0

感谢有关每个级别事件包含的解释。这是我点击并解决了我遇到的所有问题。 @SJR让我走上了正轨,尽管你提供了更多的解释。 – Cyril

1

不要右击ThisWorkbook,而是右键点击Sheet1