我有这个项目,我正在处理“数据”表,并将数据拉到“表2”中。我希望“表2”上的一行自动隐藏/取消隐藏,如果该行中的特定单元格内没有数据。
我一般对宏和编码都是陌生的。我尝试过查找,但是按照YouTube上的教程进行操作,但是对于为什么选择某些内容,它们都没有做得太深入,我也没有运气让它们起作用。
我的问题是:
当我在“数据”上时,会影响“表2”的宏是放在“表2”中还是在“ ThisWorkbook”中?
在编写宏之前,您需要选择下拉列表“工作簿”,然后假定您正在检测更改,因此“ SheetChange”正确吗?
宏将检测到隐藏的单元格中的更改,然后可以取消隐藏该单元格的行吗?
最后,我什至要为检测0和隐藏/取消隐藏单元格写些什么,到目前为止我还没有让它们做任何事情?
感谢您提供的任何帮助。
答案 0 :(得分:2)
要回答您的问题:
- 当我在“数据”上时,将影响“表2”的宏放置在“表2”中还是在“此工作簿”中?
除非代码是由诸如Worksheet_Change()之类的内置事件触发的,否则将代码放置在哪里都没有关系。在那种情况下,它必须驻留在您要检测其变化的工作表中。如果不是事件驱动的,那么我会将代码放在它自己的模块中。彼此各有。
- 在编写宏之前,您需要选择下拉菜单“工作簿”,然后假设您正在检测更改,因此“ SheetChange”正确吗?
如果您希望在工作表发生更改时执行该子例程中包含的代码,这将是适当的。您还可以通过单击按钮或双击或激活工作表等用户操作来触发代码。
- 宏会检测到隐藏的单元格中的更改,然后可以取消隐藏该单元格的行吗?
当然!为什么不?例如:
Private Sub Worksheet_Change(ByVal Target As Range)
'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
If Not Intersect(Target, Column(3)) Is Nothing Then
'Something changed in Column C! Unhide whatever row had the change
Target.EntireRow.Hidden = False
End If
End Sub
- 最后,我什至为检测0和隐藏/取消隐藏单元格写了什么,到目前为止我还没有让他们做任何事情?
使用最后一个示例来检测特定列是否发生了更改,检测它是否只是单个单元格,检测该单个单元格现在是否为0
并隐藏其行:
Private Sub Worksheet_Change(ByVal Target As Range)
'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
If Not Intersect(Target, Column(3)) Is Nothing Then
'Something changed in Column C!
If Target.Cells.Count = 1 Then
If Target.Value = "0" Then
Target.EntireRow.Hidden = True
End If
End If
End If
End Sub
在要检测到更改的任何工作表中都保留该标记。更改第一个If
,以便您仅在预期更改发生的范围内检测更改(我选择C列作为示例)。