gpt4 book ai didi

vba - 如何通过 worksheet_change 事件在模块内执行宏代码

转载 作者:行者123 更新时间:2023-12-02 19:46:16 24 4
gpt4 key购买 nike

我的工作簿第 1 页上有一组原始数据。在工作表 2 上,我使用公式从工作表 1 中提取一些数据。

使用我在模块 1 中创建并发布的宏,我想隐藏任何不包含特定数据的行。当我需要时,我可以通过“运行”>“运行子/用户窗体”直接执行宏。它运行完美。

但是,每当对工作表 1 进行编辑时,我希望它在需要通过后台的 worksheet_change 事件更新时运行。因为我正在工作表 1 上进行编辑,但希望更改在工作表上执行宏2 据我所知,worksheet_change 事件必须放置在“此工作表”中,而不是特定的工作表中。

这是宏代码

Sub HideRows()
Dim i As Integer
i = 1
Do While Not Cells(i, 5) = ""
If Cells(i, 5).Value = 0 Then
Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True
ElseIf Cells(i, 5).Value <> 0 And Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True Then
Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = False
End If
i = i + 1
Loop
End Sub

直接运行上面的代码就可以满足我的需要。我在下面使用的通过 worksheet_change 事件执行此操作的代码不起作用。

Private Sub Worksheet_Change(ByVal Target As Range)
With Me.Worksheets("Sheet2")
Call HideRows
End With
End Sub

任何有关如何使用 worksheet_change 执行宏的帮助将不胜感激。

最佳答案

有几点值得注意

  1. 问题是您没有完全限定单元格,因此当 HideRows 时即使您使用了With Me.Worksheets("Sheet2"),宏也会被调用它仍然指的是当前工作表 Sheet1 。完全限定您的范围对象,如下所示。请注意Dots在他们之前?

  2. 如果更改发生在 Col A 中的Sheet1然后捕获,否则您的宏将针对 Sheet1 中的任何更改运行从而使您的工作簿变慢。

  3. 您不需要将宏保留在模块中。您可以将整个代码放在 Sheet1 中如下图

  4. 还有Rows(CStr(i) + ":" + CStr(i))可以写成Rows(i)

  5. 在 Excel 中处理行时,始终建议将它们声明为 Long而不是Integer 。发帖Excel2007行数增加,Integer变量可能无法适应这一点。

这就是你正在尝试的吗?将此代码放入 Sheet1 的工作表代码区域中

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, lRow As Long

'~~> Check of the change is happening in Col 1
If Not Intersect(Target, Columns(1)) Is Nothing Then
With Worksheets("Sheet2")
lRow = .Range("E" & .Rows.Count).End(xlUp).Row

For i = 1 To lRow
If .Cells(i, 5).Value = 0 Then
.Rows(i).EntireRow.Hidden = True
ElseIf .Cells(i, 5).Value <> 0 And .Rows(i).EntireRow.Hidden = True Then
.Rows(i).EntireRow.Hidden = False
End If
Next i
End With
End If
End Sub

关于vba - 如何通过 worksheet_change 事件在模块内执行宏代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com