[英]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編輯器的主菜單中,插入->模塊)
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),添加以下代碼。
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.