簡體   English   中英

根據單元格值取消隱藏行

[英]Unhide rows based on cell value

我的代碼有困難。 我想做的是,當單元格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中運行代碼時,它會打開一個宏框並希望我選擇一個宏,但是我不想將代碼連接到宏...?

這有點猜測,因為我不確定代碼示例中的所有變量是做什么用的。

這里的示例工作簿

打開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子項中以進行調試。 請把它添加到您的代碼中,更改D8的值,然后告訴我消息框中顯示的內容。

筆記

我認為您可能在代碼示例Unhide_Rows Worksheet_Change重命名為Unhide_Rows ,但是您不能這樣做。 (您可以,但是它將不再像以前那樣工作)

另外,可以從VBA代碼編輯器運行不帶參數的Sub。 具有參數的Subs(例如您的Subs)不能,因為除非您使用立即窗口或具有另一個為您調用它的子(不帶參數),否則無法指定參數。

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事件,我不確定您可以使它們執行此操作。

但是,滾動條具有其自己的change event子項。

打開滾動條所在的工作表的代碼模塊(我相信,Sheet2)在左上角的下拉框中(顯示“(常規)”),滾動條會有一個項目(“ ScrollBar1”,除非您對其進行了重命名)。 選擇此項應添加更改事件代碼,如果沒有,則需要從右側的下拉框中選擇“更改”。

像下面的代碼應該工作。

Private Sub ScrollBar1_Change()
    Toggle_Rows
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM