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