Vba 快到了!如何按整数隐藏行?
在这个基于单元格输入的简单示例中,我试图通过整数计数来隐藏Excel中的行。对于Application.Rows(“x:x”)Select命令,我似乎无法获得正确的语法 下面是我的示例代码:Vba 快到了!如何按整数隐藏行?,vba,integer,Vba,Integer,在这个基于单元格输入的简单示例中,我试图通过整数计数来隐藏Excel中的行。对于Application.Rows(“x:x”)Select命令,我似乎无法获得正确的语法 下面是我的示例代码: Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer Dim k As Integer For k = 0 To 1 i = 2 + k * 20 If Target.Column = 9 And T
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim k As Integer
For k = 0 To 1
i = 2 + k * 20
If Target.Column = 9 And Target.Row = i And Target.Value = "" Then
Application.Rows("[i+4]:[i+12]").Select
Application.Selection.EntireRow.Hidden = True
Else
Application.Rows("[i+4]:[i+12]").Select
Application.Selection.EntireRow.Hidden = False
End If
If Target.Column = 9 And Target.Row = i And Target.Value = "1" Then
Application.Rows("[i+7]:[i+12]").Select
Application.Selection.EntireRow.Hidden = True
End If
If Target.Column = 9 And Target.Row = i And Target.Value = "2" Then
Application.Rows("[i+10]:[i+12]").Select
Application.Selection.EntireRow.Hidden = True
End If
If Target.Column = 9 And Target.Row = i And Target.Value = "3" Then
Application.Rows("[i+4]:[i+12]").Select
Application.Selection.EntireRow.Hidden = False
End If
Next k
End Sub
i
对Excel计算引擎没有任何意义:它只存在于VBA运行时上下文中
因此,您需要使用字符串连接运算符&
,通过将i
的值与字符串文字连接起来来构建字符串:
ActiveSheet.Rows(i + 4 & ":" & i + 12).EntireRow.Hidden = True
请注意,使用了显式的ActiveSheet
引用,无需。选择任何内容-99%的时间,您无需进行选择
还要注意,文本4
和&
运算符之间的空格非常重要。这将是一个语法错误:
ActiveSheet.Rows(i + 4& ":" & i + 12).EntireRow.Hidden = True
因为&
标记也恰好是一个类型提示说明符——这是一个模糊的符号,它几乎只存在于向后兼容的情况下,这是您想要避免的——但是知道4&
本质上意味着CLng(4)
(即,将文本整数值4
转换为Long
)通过上述关于如何将vba与字符串连接的语句,我们可以使用选择的大小写将代码缩短一点
我们还可以删除循环,因为我们只需要知道target.row是否是两个值
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Target.Column = 9 Then
If Target.Row = 2 Or Target.Row = 22 Then
Rows(Target.Row + 4 & ":" & Target.Row + 12).Hidden = False
Dim j As Long
Select Case Target.Value
Case ""
j = 4
Case "1", 1
j = 7
Case "2",2
j = 10
Case Else
Exit Sub
End Select
Rows(Target.Row + j & ":" & Target.Row + 12).Hidden = True
End If
End If
End Sub
你不需要。选择任何东西。ActiveSheet.Rows(…).EntireRow.Hidden=True
也不需要对行号(或任何东西)使用Integer
。最大值是32767(2^15-1
)-改用Long
(最大值2^31-1
=>适合任何工作表)行([i+4]:[i+12])
>行(i+4&:“&i+12)
您也不需要在目标值的1、2和3周围加引号-除非您正在读取实际文本并需要字符串文本。@PaulBaird忘了提到-&
也可以作为长的类型提示说明符,因此4&
相当于CLng(4)
-&
运算符两侧(但最重要的是左侧)的空格非常重要;-)(已编辑)-通过勾选任一答案上/下投票按钮下方的绿色空心复选标记,可以将问题标记为“已回答”。