Excel VBA类型不匹配/运行时错误';13';在某些值之间运行IF函数时-为什么会发生这种情况?试图隐藏空的行

Excel VBA类型不匹配/运行时错误';13';在某些值之间运行IF函数时-为什么会发生这种情况?试图隐藏空的行,excel,vba,Excel,Vba,嘿,伙计们,我现在已经把这段代码写出来了(没有经过优化,但如果有人也能帮上忙,我将不胜感激)。代码隐藏设置范围(B13到J45)之间的空行: 好的,这样行。这不是最好看的代码,如果有人能帮我优化它,我将不胜感激。这个问题的主要问题是,当我更改行值时,会出现“类型不匹配/运行时错误”13错误,并且它不会运行。我一辈子都不知道为什么。这就是我试图运行的(字面上唯一的区别是行范围,即58到81): 我想我的问题有两个部分: 为什么会发生这种情况?我如何修复它 有没有更聪明的方法 非常感谢您抽出时间。隐

嘿,伙计们,我现在已经把这段代码写出来了(没有经过优化,但如果有人也能帮上忙,我将不胜感激)。代码隐藏设置范围(B13到J45)之间的空行:

好的,这样行。这不是最好看的代码,如果有人能帮我优化它,我将不胜感激。这个问题的主要问题是,当我更改行值时,会出现“类型不匹配/运行时错误”13错误,并且它不会运行。我一辈子都不知道为什么。这就是我试图运行的(字面上唯一的区别是行范围,即58到81):

我想我的问题有两个部分:

  • 为什么会发生这种情况?我如何修复它
  • 有没有更聪明的方法
  • 非常感谢您抽出时间。

    隐藏行
    • 与其使用
      ActiveSheet
      ,不如使用类似于
      thiswoolk.Worksheets(“Sheet1”)
    代码

    Option Explicit
    
    Sub Hide1()
        HideRows 13, 45
    End Sub
    
    Sub Hide2()
        HideRows 58, 61
    End Sub
    
    Sub HideRows( _
            ByVal FirstRow As Long, _
            ByVal LastRow As Long)
        Const ColsAddress As String = "B:J"
        Dim ws As Worksheet: Set ws = ActiveSheet
        Dim crg As Range: Set crg = ws.Columns(ColsAddress)
        Dim cCount As Long: cCount = crg.Columns.Count
        Dim trg As Range
        Dim i As Long
        For i = FirstRow To LastRow
            If Application.CountBlank(crg.Rows(i)) = cCount Then
                If trg Is Nothing Then
                    Set trg = ws.Rows(i)
                Else
                    Set trg = Union(trg, ws.Rows(i))
                End If
            End If
        Next i
        If Not trg Is Nothing Then
            trg.Rows.Hidden = True
        End If
    
    End Sub
    

    很可能在某些单元格中有错误值。请尝试:
    If Worksheetfunction.CountIf(单元格(i,“B”).Resize(1,9),“”)=0,然后
    感谢您的回复,因此它会运行,但不会执行任何操作。行中有公式,这可能就是它不删除它们的原因。由于这个原因,不确定如何最好地合并。要删除的行是根据输入的特定值生成的,因此有一种方法可以根据行的位置删除行。我认为这种方法可能会更好地考虑当前工作表的设置方式。公式是否返回“”?看起来不像,从视觉上看,它是空白的,但如果我点击单元格,它会得到一个很长的公式。嘿@vbasic208,谢谢你,它工作得很好。我正在尝试在我的主sub中运行此sub,但它没有运行。只有当我单独运行每个子系统时,它才会运行。也就是说,我试图在我的主sub中使用Call Hide1,但它没有任何作用。你知道为什么吗?更新:我让它工作了,但只是在把命令放在“Application.screenputation=True”之后。如果这是假的,我想它不喜欢这样做。
    For i = 58 To 81
        If Cells(i, "B") & Cells(i, "C") & Cells(i, "D") & Cells(i, "E") & Cells(i, "F") & Cells(i, "G") _
        & Cells(i, "F") & Cells(i, "G") & Cells(i, "H") & Cells(i, "I") & Cells(i, "J") = "" Then
            Rows(i).EntireRow.Hidden = True
        End If
    Next i
    
    Option Explicit
    
    Sub Hide1()
        HideRows 13, 45
    End Sub
    
    Sub Hide2()
        HideRows 58, 61
    End Sub
    
    Sub HideRows( _
            ByVal FirstRow As Long, _
            ByVal LastRow As Long)
        Const ColsAddress As String = "B:J"
        Dim ws As Worksheet: Set ws = ActiveSheet
        Dim crg As Range: Set crg = ws.Columns(ColsAddress)
        Dim cCount As Long: cCount = crg.Columns.Count
        Dim trg As Range
        Dim i As Long
        For i = FirstRow To LastRow
            If Application.CountBlank(crg.Rows(i)) = cCount Then
                If trg Is Nothing Then
                    Set trg = ws.Rows(i)
                Else
                    Set trg = Union(trg, ws.Rows(i))
                End If
            End If
        Next i
        If Not trg Is Nothing Then
            trg.Rows.Hidden = True
        End If
    
    End Sub