John Brock wrote:
In article ,
Ron de Bruin wrote:
Hi
See this page
http://www.contextures.com/xlautofilter03.html
The VBA (not VB.NET) example on that page is:
Sub TurnAutoFilterOn()
'check for filter, turn on if none exists
If Not ActiveSheet.AutoFilterMode Then
ActiveSheet.Range("A1").AutoFilter
End If
End Sub
I don't see how this is different than what I am doing now. My
'ws' variable *is* the active worksheet (in fact the only worksheet).
I tried using a single cell range, as in the example, but that
makes no difference. The AutoFilter statement still throws an
exception.
The example given for turning off AutoFiltering uses an AutoFilterMode
variable. I changed my code to:
ws.AutoFilterMode = true
rng = ws.Range("MyTableRange")
rng.AutoFilter()
But now the first statement throws an exception, with the even less
enlightening message:
Exception from HRESULT: 0x800A03EC.
Lifted from the MSDN page on AutoFilterMode at
http://msdn2.microsoft.com/en-us/mic...erm ode.aspx:
Remarks
You can set this property to false to remove the arrows, but you
cannot set it to true.
That would explain why the line 'ws.AutoFilterMode = true' throws an
exception.
I'm not very familiar with Excel programming, but in every example I
could find, everyone always sets AutoFilterMode to false (which is
allowed) before calling AutoFilter on their range object. So I would
say try this:
ws.AutoFilterMode = false
rng = ws.Range("MyTableRange")
rng.AutoFilter()
Setting AutoFilterMode to false also has the side-effect of removing
any previous AutoFilters that were on the worksheet, which I guess is
important before you call AutoFilter() again...
<snip
Mike S