1
我有一个13行的范围,第一行是一个标题行,接下来的12行由QueryTable填充。该查询将返回最多12行,但可能更少。在这个范围之下,我有一个总计行。自动筛选器不工作
我想隐藏任何没有数据的行,我使用AutoFilter来做到这一点。当我运行代码时,它会创建AutoFilter,但不会应用这些条件。如果我单步执行代码,它就可以正常工作。有任何想法吗?
Sub fillTable()
Dim strConn As String
Dim strSQL As String
Dim qt As QueryTable
Sheet15.AutoFilterMode = False
Sheet15.Range("DCRTable").ClearContents
strConn = "ODBC;DSN=MS Access Database;DBQ=<db path>;"
Set qt = Sheet15.QueryTables.Add(strConn, Sheet15.Range("DCRTable"))
qt.CommandText = <sql query>
qt.AdjustColumnWidth = False
qt.EnableRefresh = False
qt.FieldNames = False
qt.Refresh
hideEmpties Sheet15.Range("DCRTable").offset(-1).Resize(13)
End Sub
Sub hideEmpties(rng As Range)
rng.Parent.AutoFilterMode = False
With rng
.AutoFilter
.AutoFilter 1, "<>", , , False
End With
End Sub
谢谢。 Sheet15是工作表对象的代码名称。这是参考工作表的首选方式。标准的最佳做法是先不使用条件来构建AutoFilter,然后再添加条件。问题似乎是一个时机;如果我单步执行代码,它就可以工作。如果我一次运行它,它不会。 – 2009-11-12 18:52:45
在这种情况下,请尝试使用“BackgroundQuery”属性,即在应用.Refresh方法之前将其设置为FALSE。这可能只是一种安全预防措施,但我无法清楚地看到此属性的默认值。设置为TRUE,脚本执行一旦**连接**开始,而不是所有行都返回(这是你想要的)。祝你好运MikeD – MikeD 2009-11-16 08:37:49
对不起,我保留了这么久。该建议似乎奏效了。如果您编辑原始解决方案以符合您的评论,我很乐意接受它。谢谢你的帮助! – 2009-12-30 23:37:44