我的代码遇到了问题。我想要做的是当单元格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中运行代码时,它打开一个宏框并希望我选择一个宏,但我不想将代码连接到宏......?
答案 0 :(得分:3)
这有点猜测,因为我不太清楚代码示例中的所有变量是什么。
打开VBA编辑器(Alt + F11)
将以下Sub插入模块(在VBA编辑器的主菜单中,插入 - >模块)
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
现在在“Project Explorer”中(通常在VBA编辑器的左侧)打开您正在使用的工作表的代码模块(在我的示例中为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
<强>更新强>
请确保您已将代码复制到正确的模块中!为调试目的,我在Worksheet_Change
子句中添加了一行。请将其添加到您的代码中,更改D8
中的值并告诉我消息框中显示的内容。
备注强>
我认为您可能已在代码示例中将Worksheet_Change
重命名为Unhide_Rows
,但您无法做到。 (你可以,但它将不再像以前一样工作)
此外,可以从VBA代码编辑器运行没有参数的Subs。 Subs WITH arguments(与你的一样)不能,因为除非你使用立即窗口或者有另一个为你调用它的子(没有参数),否则无法指定参数。
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我相信)在左上角的下拉框中(其中显示“(general)”),滚动条会有一个项目(“ScrollBar1”除非你重命名它)。选择此选项应添加更改事件代码,否则您需要从右侧下拉框中选择“更改”。
以下代码应该有效。
Private Sub ScrollBar1_Change()
Toggle_Rows
End Sub