0

我的代码有困难。我想要做的是当单元格 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 中运行代码时,它会打开一个宏框并希望我选择一个宏,但我不想将代码连接到宏...?

4

1 回答 1

3

这有点猜测,因为我不太确定您的代码示例中的所有变量的用途。

示例工作簿在这里

打开 VBA 编辑器 (Alt+F11)

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

在 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

现在在“项目资源管理器”(通常在 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

更新

请确保您已将代码复制到正确的模块中!Worksheet_Change出于调试目的,我在 sub 中添加了一行。请将其添加到您的代码中,更改其中的值D8并告诉我消息框中显示的内容。

笔记

我认为您可能已在代码示例中重命名Worksheet_ChangeUnhide_Rows,这是您无法做到的。(你可以,但它不再像以前那样工作了)

此外,没有参数的 Subs 可以从 VBA 代码编辑器运行。带参数的子程序(如您的)不能,因为除非您使用即时窗口或有另一个子程序(不带参数)为您调用它,否则无法指定参数。

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)在左上角的下拉框(其中显示“(一般)”)中,您的滚动条将有一个项目(“ScrollBar1”,除非您重命名它)。选择此项应添加更改事件代码,否则您需要从右侧下拉框中选择“更改”。

像下面这样的代码应该可以工作。

Private Sub ScrollBar1_Change()
    Toggle_Rows
End Sub
于 2013-04-02T19:56:45.870 回答