Excel 使用宏隐藏行
我有一个我正在做的项目,我有一个“数据”表,把数据拉到“表2”。我希望“第2页”上的一行在该行的特定单元格中没有数据时自动隐藏/取消隐藏 一般来说,我对宏和编码非常陌生。我试着在YouTube上查找这些内容,但没有一个能深入了解你为什么选择某些东西,而我也没有运气让它们发挥作用 我的问题是:Excel 使用宏隐藏行,excel,Excel,我有一个我正在做的项目,我有一个“数据”表,把数据拉到“表2”。我希望“第2页”上的一行在该行的特定单元格中没有数据时自动隐藏/取消隐藏 一般来说,我对宏和编码非常陌生。我试着在YouTube上查找这些内容,但没有一个能深入了解你为什么选择某些东西,而我也没有运气让它们发挥作用 我的问题是: 当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中 在编写宏之前,您需要选择下拉菜单“工作簿”,然后我假设您检测到更改,那么“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
,并隐藏其行:
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
把它放在你想要检测变化的任何工作表中。如果,则先更改
,这样您只会检测到您预期发生更改的任何范围内的更改(我选择C列作为示例) 要回答您的问题:
当我在“数据”上时,影响“工作表2”的宏是否放在“工作表2”或“ThisWorkbook”中
除非代码是由内置事件(如工作表_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
把它放在你想要检测变化的任何工作表中。如果
,则先更改,这样您只会检测到您预期发生更改的任何范围内的更改(我选择C列作为示例) 我假设工作表2通过一个公式拉入数据?“到目前为止,我还没有让他们中的任何人做任何事情?”--你能编辑你的问题来发布你的代码吗?对于工作表上大多数没有处理特定动作(事件)的代码,创建一个新模块来放置你的代码,不在Sheet1或ThisWorkbook模块中。在VBA编辑器中的模块树上单击鼠标右键,然后选择“插入->模块”。如果要使用SheetChange
事件,则该事件会出现在要捕获该事件的特定工作表模块中。你可以检查代码中隐藏的单元格,看看@PeterT,我认为OP意味着事件,但无论如何,我认为这可能是事件的一个例子。我们会看到…我假设工作表2通过公式拉入数据?“到目前为止,我还没有让他们中的任何人做任何事情?”--你能编辑你的问题来发布你的代码吗?对于你工作表上大多数没有处理特定动作(事件)的代码,创建一个新模块来开始你的代码,不在Sheet1或ThisWorkbook模块中。在VBA编辑器中的模块树上单击鼠标右键,然后选择“插入->模块”。如果要使用SheetChange
事件,则该事件会出现在要捕获该事件的特定工作表模块中。你可以检查代码中隐藏的单元格,看看@PeterT,我认为OP意味着事件,但无论如何,我认为这可能是事件的一个例子。我们等着瞧吧……好直觉@BigBen。我真的希望能和某个前男友接近OP的目标