sorting code problems

D

DKY

Okay, I tried utilizing this code to look in Column U for anythin
that's not D6 and delete that row. Here's what I got but the debu
keeps pointing to the ActiveSheet.ShowAllData part of the code.
don't understand, what Tom put works perfectly on my previous project.
What am I doing wrong in this code?

Dim rng As Range, rng1 As Range
Range("U1").CurrentRegion.AutoFilter _
Field:=3, Criteria1:="<>D6", Operator:=xlAnd
Set rng = Intersect(ActiveSheet.AutoFilter.Range, Columns(3))
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1)
On Error Resume Next
Set rng1 = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng1 Is Nothing Then
rng1.EntireRow.Delete
End If
ActiveSheet.ShowAllData
Range("U1").CurrentRegion.AutoFilter
 
D

Dave Peterson

It looks like there's a bug in excel.

If you delete all the rows (except the headers), then excel has a difficult time
showing all the data.

This kind of code usually works:

If activesheet.FilterMode Then
activesheet.ShowAllData
end if

But when I deleted all the rows in the table, it still blew up--In fact, I
couldn't get Data|filter|showall to remove that blue dropdown arrow. (Excel
still thought that the sheet was filtered.

But this code:

on error resume next
activesheet.showalldata
on error goto 0

Stopped the error from causing a runtime error.

But even better, the following line:
Range("U1").CurrentRegion.AutoFilter
toggled the autofilter off.

(The short answer is coming (promise).)

Delete that offending line and you'll be ok.

========
The real question is are you sure you're doing what you want in your code:

These two lines look like trouble to me:

Range("U1").CurrentRegion.AutoFilter _
Field:=3, Criteria1:="<>D6", Operator:=xlAnd
Set rng = Intersect(ActiveSheet.AutoFilter.Range, Columns(3))

If you select U1 and hit ctrl-* (shift-8) what's the range that's selected.

That's the range that's filtered. And you're using the 3 column as your key.

If you got columns A:U (or more), then field 3 is column C.

And that's the column that you're checking to see if it's different from "D6".

This may work better for just checking one column (U):

Option Explicit
Sub testme01()
Dim rng As Range, rng1 As Range

With ActiveSheet
.AutoFilterMode = False

.Range("U1").EntireColumn.AutoFilter _
Field:=1, Criteria1:="<>D6"
Set rng = .AutoFilter.Range
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1)
On Error Resume Next
Set rng1 = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng1 Is Nothing Then
rng1.EntireRow.Delete
End If
.AutoFilterMode = False
End With

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top