Excel VBA运行时错误1004对象_worksheet的方法范围失败

时间:2017-10-24 05:58:59

标签: excel vba excel-vba

我真的需要帮助来确定我的excel vba上的错误。完全是初学者。

基本上vba代码会做"过滤"为工作表。奇怪的是,当过滤其他类别时,vba可以工作。但在1类中,它只是一直给我运行时错误1004(对象_worksheet的方法范围失败)。

调试模式将始终精确到代码行:

Range(Mid(rangeToHide, 1, 199)).Select

以下是代码:

Private Sub cboPopulateDept_Change()
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer
Dim rangeToHide As String
Dim emptyRow As Integer

unHide

If cboPopulateDept.Value = "ALL" Or cboPopulateDept.Value = "" Then
    Exit Sub
End If

RowCount = 1

Set sh = ActiveSheet
For Each rw In sh.Rows
    If RowCount >= 6 Then
        If sh.Cells(RowCount, 1).Value Like "TOP Innovation Projects - Vision 2020 - Participating?" Then
            Exit For
        End If

        If sh.Cells(RowCount, 3).Value <> cboPopulateDept.Value And sh.Cells(RowCount, 3).Value <> "" Then
            'sh.Cells(RowCount, 3).EntireRow.Hidden = True
            'sh.Cells(RowCount + 1, 3).EntireRow.Hidden = True

            rangeToHide = rangeToHide & RowCount & ":" & RowCount + 1 & ","
            RowCount = RowCount + 2
        Else
            RowCount = RowCount + 1
        End If
    Else
        RowCount = RowCount + 1
    End If

Next rw

rangeToHide = Mid(rangeToHide, 1, Len(rangeToHide) - 1)
 If Len(rangeToHide) <= 201 Then
    Range(rangeToHide).Select
    Selection.EntireRow.Hidden = True
Else
    Range(Mid(rangeToHide, 1, 199)).Select
    Selection.EntireRow.Hidden = True

    Range(Mid(rangeToHide, 201, Len(rangeToHide))).Select
    Selection.EntireRow.Hidden = True
End If

'Range(rangeToHide).Select
'Selection.EntireRow.Hidden = True

Range("A8:A9").Select

End Sub

由于

干杯, RH

1 个答案:

答案 0 :(得分:0)

您可能没有选择有效范围:

Range(Mid(rangeToHide, 1, 199)).Select

当rangeToHide被声明为字符串时,除非Mid(rangeToHide, 1, 199)解析为有效的范围地址,例如"A3",否则您将无法在Range(myexpression).Select内使用它。看一下这个表达式,让它停止改变价值。然后运行代码并在使用相关过滤器时检查表达式的值。

你也应该使用VBNullString而不是''和Long而不是整数。另外,在顶部使用显式选项来检查是否已声明所有变量并且已使用它们。并明确引用ActiveWorkbook而不是隐式。