简化 Select 个案例

Streamlining a Select Case

我对 VBA 还是比较陌生,但经过一些研究后,我设法构建了下面的 select 案例。

我想hide/unhide在一个单元格中指定行数。我目前有一个可以使用的 select 案例,但冗长且仅限于 30 个。

Sub Toggle_Rows()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Calendar")
Change Sheet1 to the name of your sheet

Select Case CStr(Sheet.Range("NoEmployees").Value2)

Case "1"
    Sheet.Rows("8:36").Hidden = True
    Sheet.Rows("7:7").Hidden = False
Case "2"
    Sheet.Rows("9:36").Hidden = True
    Sheet.Rows("7:8").Hidden = False
Case "3"
    Sheet.Rows("10:36").Hidden = True
    Sheet.Rows("7:9").Hidden = False
Case "4"
    Sheet.Rows("11:36").Hidden = True
    Sheet.Rows("7:10").Hidden = False
Case "5"
    Sheet.Rows("12:36").Hidden = True
    Sheet.Rows("7:11").Hidden = False
Case "6"
    Sheet.Rows("13:36").Hidden = True
    Sheet.Rows("7:12").Hidden = False
Case "7"
    Sheet.Rows("14:36").Hidden = True
    Sheet.Rows("7:13").Hidden = False
Case "8"
    Sheet.Rows("15:36").Hidden = True
    Sheet.Rows("7:14").Hidden = False
Case "9"
    Sheet.Rows("16:36").Hidden = True
    Sheet.Rows("7:15").Hidden = False
Case "10"
    Sheet.Rows("17:36").Hidden = True
    Sheet.Rows("7:16").Hidden = False

ETC...

Case Else

End Select

End Sub

如果有人能解释一种方法,我可以缩短它并扩展行数 hide/unhide 那么我们将不胜感激。

我建议你只需要这样的东西

Select case CLng(Sheet.Range("NoEmployees").Value2)

Case 1 to 30
    Sheet.Rows("7:36").Hidden = True
    Sheet.Rows(7).resize(CLng(Sheet.Range("NoEmployees").Value2)).Hidden = False
End Select

我把 Select 案例留在那里,因为我假设你想限制可能受影响的行。

在你的情况下,你的变量和你想要 hide/unhide 线性相关的范围。因此,您不需要 select 案例,但可以使用以下内容:

val = your value
Sheet.Rows(7+val & ":36").Hidden = True
Sheet.Rows("7:" & 6+val).Hidden = False

涵盖所有情况。

使用 table,这样您只需查找您的 CASE 值,即可找到您需要的 2 个数字。如果您的 CASE 值是(或可以变成)连续的整数,您可以使用数组;否则某种字典就可以了。