[英]Hide and Unhide a range of rows based on the value in a cell
非常基本,我敢肯定,但我一生都無法弄清楚。
我有一組單選按鈕,可以在 1 和 2 之間更改單元格(“L37”)的值。
我嘗試用幾種不同的方式編寫 VBA 代碼,但沒有運氣。 請指教。
Sub hide_sheet()
If Worksheets("Feedback").Range("L37").Value = 1 Then
Rows("63:93").EntireRow.Hidden = True
Else Worksheets("Feedback").Range("L37").Value = 2 Then
Worksheets("Feedback").Rows("63:93").EntireRow.Hidden = False
End If
End Sub
我通過與單選按鈕綁定的宏讓它工作得很好; 但是,由於我需要保護工作表,我需要更改它。
我正在使用保護/取消保護 VBA 代碼,並希望將其包含到代碼中,這樣它就不會觸發宏/工作表保護警告。
這是我用於所有內容的保護/取消保護代碼。
Sub unprotect()
Worksheets("Feedback").unprotect
End Sub
Sub protect()
Worksheets("Feedback").protect , _
AllowFormattingCells:=True, _
AllowFormattingRows:=True
End Sub
任何建議將不勝感激。 提前感謝您的幫助。
問題
Feedback
工作表不合格,因此如果錯誤的工作簿處於活動狀態,它將失敗。 要引用包含此代碼的工作簿,您可以使用ThisWorkbook
:
ThisWorkbook.Worksheets("Feedback")...
您在 If 子句中使用Rows("63:93")
而不是Worksheets("Feedback").Rows("63:93")
。 如果錯誤的工作表處於活動狀態(選中),它將失敗。
您正在使用Else
而不是ElseIf
。
您可以使用With
語句來減少鍵入,如以下代碼所示。
如果將單元格值轉換為字符串,則如果單元格意外包含錯誤值,則代碼不會失敗。
編碼
Sub ShowHideRowsFix()
With ThisWorkbook.Worksheets("Feedback")
.Unprotect
Select Case CStr(.Range("L37").Value)
Case "1"
.Rows("63:93").Hidden = True
Case "2"
.Rows("63:93").Hidden = False
Case Else
End Select
.Protect AllowFormattingCells:=True, AllowFormattingRows:=True
End With
End Sub
一種提升
Feedback
工作表的工作表模塊中,例如Sheet1(FeedBack)
(雙擊打開),您可以使用以下代碼。Private Sub Worksheet_Change(ByVal Target As Range)
Const CellAddress As String = "L37"
Dim Cell As Range: Set Cell = Me.Range(CellAddress)
If Intersect(Cell, Target) Is Nothing Then Exit Sub
ShowHideRows Cell
End Sub
Sub ShowHideRows(ByVal Cell As Range)
With Cell.Worksheet
.Unprotect
Select Case CStr(Cell.Value)
Case "1"
.Rows("63:93").Hidden = True
Case "2"
.Rows("63:93").Hidden = False
Case Else
End Select
.Protect AllowFormattingCells:=True, AllowFormattingRows:=True
End With
End Sub
我更喜歡盡可能簡單的方法。 這是我用來隱藏為您的需要重新編寫的列的方法。
以下代碼可能存在於用戶窗體或標准代碼模塊中:IF RadioButton1.Value = True then 'Assuming the value is 1
rwControl "hRW" 'This hides the Rows
ELSE
rwControl "uRW" 'This unhides the Rows
End If
您可以直接從 RadioButton_Change() 事件中調用此代碼,包括以下代碼:
IF RadioButton1.Value = True then 'Assuming the value is 1 rwControl "hRW" 'This hides the Rows ELSE rwControl "uRW" 'This unhides the Rows End If
或者,為了保持簡單:
在您的RadioButton_Change()
事件中只需添加:
Private Sub RadioButton1 Change() With ThisWorkBook.Worksheets("Feedback").Unprotect If RadioButton1.Value = True Then.Rows("63:93").Hidden = True Else.Rows("63:93").Hidden = False End If.Protect End With End Sub
使用這種方法可以消除對Worksheet Module Coding
和Case Coding
的需求,並且如果您認為RadioButtons
對功能很重要,則可以保留它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.