根据单元格值取消隐藏行

我的代码有困难。 我想要做的是当单元格D8中的数字上升时,它将取消隐藏一个行块。 这是下面的代码:

Sub Unhide_Rows(ByVal Target As Range) If Range("D8").Value > 1 Then Select Case Target.Value Case "2": Rows("17:36").Hidden = True: Rows("10:16").Hidden = False Case "3": Rows("21:37").Hidden = True: Rows("10:20").Hidden = False Case "4": Rows("25:37").Hidden = True: Rows("10:24").Hidden = False Case "5": Rows("29:37").Hidden = True: Rows("10:29").Hidden = False Case "6": Rows("33:37").Hidden = True: Rows("10:33").Hidden = False Case "7": Rows("10:37").Hidden = False: Rows("55:56").Hidden = True End Select End If End Sub 

我遇到的另一个问题是,当我尝试在VBA中运行代码时,它打开一个macros框,并希望我select一个macros,但是我不想将代码连接到一个macros…?

这是一个有点猜测,因为我不太清楚代码示例中的所有variables。

示例工作簿在这里

打开VBA编辑器(Alt + F11)

将以下Sub插入模块(在VBA编辑器中,在主菜单的Insert-> Module中)

在vbaeditor中显示module1

 Sub Toggle_Rows() Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1") ' Change Sheet1 to the name of your sheet Select Case CStr(Sheet.Range("D8").Value2) Case "2" Sheet.Rows("17:36").Hidden = True Sheet.Rows("10:16").Hidden = False Case "3" Sheet.Rows("21:37").Hidden = True Sheet.Rows("10:20").Hidden = False Case "4" Sheet.Rows("25:37").Hidden = True Sheet.Rows("10:24").Hidden = False Case "5" Sheet.Rows("29:37").Hidden = True Sheet.Rows("10:29").Hidden = False Case "6" Sheet.Rows("33:37").Hidden = True Sheet.Rows("10:33").Hidden = False Case "7" Sheet.Rows("10:37").Hidden = False Sheet.Rows("55:56").Hidden = True Case Else ' none End Select End Sub 

现在在“工程资源pipe理器”(通常在VBA编辑器的左边)打开您正在使用的工作表(在我的例子中是Sheet1)的代码模块添加下面的代码。

在vbaeditor中显示sheet1代码

 Private Sub Worksheet_Change(ByVal Target As Range) Msgbox Prompt:="Target.Address=" & Target.Address ' remove this line after debugging. If Target.Address = "$D$8" Then Toggle_Rows End If End Sub 

更新

请确保您已将代码复制到正确的模块中! 为了进行debugging,我在Worksheet_Change子项中添加了一行。 请将其添加到您的代码中,更改D8的值并告诉我消息框中显示的内容。

笔记

我想你可能已经在你的代码示例Unhide_Rows Worksheet_Change重命名为Unhide_Rows ,这是你不能做的。 (你可以,但不会像以前那样工作)

另外,没有参数的Subs可以从VBA代码编辑器运行。 Subs WITH参数(如你的)不能,因为没有办法指定参数,除非你使用立即窗口或有另一个子(无参数)调用它。

 Sub HelloWorld(ByVal Text As String) ' cant be run directly Debug.print "Hello World! " & Text) End Sub Sub CallHello() ' can be run directly in the vba editor HelloWorld "Im Alive!" End Sub 

您也可以使用“立即”窗口调用“HelloWorld”。

 HelloWorld "Im Alive!" (press enter) 

更新2

你的滚动条没有触发Worksheet_Change事件,我不知道你可以让他们这样做。

但是,滚动条有其自己的更改事件子。

打开滚动条所在工作表的代码模块(我相信Sheet2)在左上angular的下拉框(它表示“(general)”)中会有一个滚动条(“ScrollBar1”,除非你重命名)。 select这个应该添加更改事件代码,如果没有,则需要从右侧的下拉框中select“更改”。

像下面的代码应该工作。

 Private Sub ScrollBar1_Change() Toggle_Rows End Sub