- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的工作簿第 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 执行宏的帮助将不胜感激。
最佳答案
有几点值得注意
问题是您没有完全限定单元格,因此当 HideRows
时即使您使用了With Me.Worksheets("Sheet2")
,宏也会被调用它仍然指的是当前工作表 Sheet1
。完全限定您的范围对象,如下所示。请注意Dots
在他们之前?
如果更改发生在 Col A
中的Sheet1
然后捕获,否则您的宏将针对 Sheet1
中的任何更改运行从而使您的工作簿变慢。
您不需要将宏保留在模块中。您可以将整个代码放在 Sheet1
中如下图
还有Rows(CStr(i) + ":" + CStr(i))
可以写成Rows(i)
在 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/
我希望将我的工作簿用户限制在一系列单元格中的 1000 个字符 (Example: A5:A30) . 换句话说,限制 范围内的总字符数。 A5:A30 到 1000 个字符。 当用户填写发送范围超过
我正在尝试创建一些代码来在另一个单元格更改时重置一个单元格。有三个下拉单元格,每个单元格都依赖于它之前的单元格(B3 依赖于 B2,B4 依赖于 B3 和 B2)。 因此,如果有人设置 B4,然后更改
我有一个宏启动并运行,它对数据透视表进行排序,从表中复制一系列单元格,然后将它们粘贴到第二张表中。老实说,就我现在使用 VBA 的情况而言,我对这一壮举感到非常满意。然而,我还有更多想要它做的事情。
我正在尝试根据 H 列中的值自动更新 I 列中的单元格值。 - 我希望每当用户在 H 列中输入任何值时,应将前五个字符复制到相应的 I 列中。 如果我在 H 列中输入 123456789,那么 123
我正在尝试组合以下宏: 在下拉列表中进行多项选择 自动调整合并单元格 隐藏/取消隐藏表单中的行 宏单独工作,但它们都应该添加到同一个特定工作表中,我不知道如何组合它们。任何帮助表示赞赏。谢谢! 1)
使用结构化引用时,我在触发 Worksheet_Change 宏时遇到问题。我发誓我以前可以使用它,所以我认为这是一个语法问题。 当我使用“$A$1”类型引用目标单元格时,它工作正常。但是,当我对已更
Private Sub Worksheet_Change(ByVal Target As Range) MsgBox ("hi") End Sub 我从未看到“嗨”消息。我有一张工作表,名为 Sh
我编写了一段代码,当单元格 L3 更改时,它会根据 L3 的内容依次更改一系列单元格。 L3 是一个从 L3 到 N4 的合并单元格,尽管如此,代码仍然可以正常工作,直到用户删除内容而不是输入新内容。
我的 Excel 项目在家中(使用 Excel 2010)可以正常运行,但在两台工作计算机(使用 Excel 2016)上运行不正常,我怀疑 Worksheet_Change 事件是问题所在。 当用户
这里是 VBA 初学者。 我有一个项目,我为用户指定了输入单元格。当这些输入单元格之一发生更改时,它需要运行几行仅特定于该单元格的代码。如果用户清除单元格的内容,我希望代码将空白单元格替换为值“0”。
Skip my rambling narrative by scrolling down to tldr and Question. 我有几个带有值的行和列;例如答10:G15。在每行中,紧邻任何单元
我是一名 Excel-VBA 新手,我正在尝试编写一小段代码,该代码是由某人更改工作表中单元格的值触发的。如果已更改单元格的值小于零,则应将其设置为零。代码如下所示: Private Sub Work
我正在使用 VBA 来更改 Excel,并在 Sheet1 中包含以下简单的事件处理程序: Private Sub Worksheet_Change(ByVal Target As Range)
我正在尝试编写一个宏来更改任何列应自动保存工作表。 我的 Excel 工作表扩展到 G25。 我尝试了这个,但它不起作用: Private Sub Worksheet_Change(ByVal Tar
当列“P”取值“x”时,我遇到了“Worksheet_Change”子问题,该子将整行复制并粘贴到第二个工作表(“已完成”)中。它的内容如下: Private Sub Worksheet_Change
我正在创建一个库存电子表格。当零件的数量低于重新订购数量时,会自动弹出一个带有电子邮件以发送重新订购零件的电子邮件。 该代码正在确定何时弹出电子邮件,但我不想用零件号和供应商信息自动填充电子邮件。 我
我想先说我是 VBA 的新手,所以希望这是一个简单的解决方法。 我正在尝试使以下 VBA 代码适用于具有公式的多个单元格。效果是单元格中有一个幻影值,用户可以覆盖然后再次查看他们是否删除了它们的值。我
我正在尝试拥有多个 Worksheet_Change在一张纸上,但是我在实现它们时遇到了问题。 我试过了: Private Sub Worksheet_Change(ByVal Target As R
我想知道您是否可以帮助我处理两个不同目标的 worksheet_Change。 我的代码如下: Private Sub Worksheet_Change(ByVal Target As Range)
我想在Sheet1中写一段VBA代码它对 Excel 下拉列表中所做的更改作出 react 。 目前,我已经编写了以下代码,其中 Zeile = Row并且下拉列表中的每个相关条目都可以在K7:K10
我是一名优秀的程序员,十分优秀!