[英]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.