我真的需要帮助来确定我的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
答案 0 :(得分:0)
您可能没有选择有效范围:
Range(Mid(rangeToHide, 1, 199)).Select
当rangeToHide被声明为字符串时,除非Mid(rangeToHide, 1, 199)
解析为有效的范围地址,例如"A3"
,否则您将无法在Range(myexpression).Select
内使用它。看一下这个表达式,让它停止改变价值。然后运行代码并在使用相关过滤器时检查表达式的值。
你也应该使用VBNullString而不是''和Long而不是整数。另外,在顶部使用显式选项来检查是否已声明所有变量并且已使用它们。并明确引用ActiveWorkbook而不是隐式。