我正在为其单元格基于Access数据库填充的工作表编写脚本。我试图清除工作表的内容而不删除用户设置的任何自动筛选器,然后重新加载基于数据库的数据。现在,我使用:透明细胞,同时保留自动过滤器设置?
Sub populateSheet()
Dim sht As Worksheet
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("c:\myDB.mdb")
Set rs = db.OpenRecordset("myData")
Set sht = ThisWorkbook.Sheets("my output")
With sht
.Cells.value=empty
For c = 0 To rs.Fields.Count - 1
.Cells(1, c + 1) = rs.Fields(c).name
Next
.Range("a2").CopyFromRecordset rs
End With
End Sub
sub buildTable()
dim ws as workspace
dim db as database
dim dbPath as string
set ws=dbengine.workspaces(0)
set db=ws.createdatabase("c:\myDB.mdb")
db.execute "create table myData (field1 text,field2 text)"
db.execute "insert into myData (field1,field2) values (""1"",""a"")"
db.execute "insert into myData (field1,field2) values (""2"",""b"")"
db.execute "insert into myData (field1,field2) values (""3"",""a"")"
db.close
end sub
sub test()
buildTable
populateSheet
end sub
当我运行.cells.clear
,它抹了自动筛选。有没有一种方法可以保持自动筛选设置,以便以相同的方式过滤新数据?或者可能记录它们并重新应用相同的设置?我尝试使用this solution,但我无法检测哪些列被过滤。
编辑:
我申请让FrançoisCorbett的方法在上面的代码,但它有一个问题。用测试表试试这个:
1 a
2 b
3 a
运行populateSheet
后,再自动筛选第2列,只包括“A”,在工作表中显示:
1 a
3 a
然后现在再次运行populateSheet
,板材显示:
1 a
1 a
如果删除自动筛选,重新运行populateSheet
,并重新申请自动筛选,你会得到正确的数据,但是这是一个非常繁琐的额外步骤来获得正确的输出。
编辑: 我添加的代码创建一个数据库,让你可以用它来测试populateSheet
表,并改变了一些参数在populateSheet
以反映此测试数据库。
而不是.Clear你试过.ClearContents? –
@TimWilliams,这仍然会清除AutoFilter。 sigil,你在用什么Excel版本? – brettdj