Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 快到了!如何按整数隐藏行?_Vba_Integer - Fatal编程技术网

Vba 快到了!如何按整数隐藏行?

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

在这个基于单元格输入的简单示例中,我试图通过整数计数来隐藏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 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)
-
&
运算符两侧(但最重要的是左侧)的空格非常重要;-)(已编辑)-通过勾选任一答案上/下投票按钮下方的绿色空心复选标记,可以将问题标记为“已回答”。