非常令人沮丧的结果:
ws.Range(myExcelTable).CopyFromRecordset rs
' myExcelTable is a named table with assigned range
rs的pull(记录集是全选的,无论是通过这种方式还是使用字段名,结果都相同)
cmdSQL2 = "SELECT * FROM " & myAccessTable
rs.Open cmdSQL2, conn
出于未知原因,它会按以下顺序将记录复制到excel中(使用pID来显示顺序):
3-8
0-2
9条记录
我尝试了几种范围方法,结果是相同的。 我将在此处“手动炸弹”它们,以减少我在构建范围字符串中执行的额外工作。
ws.Range("S4").CopyFromRecordset rs
ws.Range("S4:BP258").CopyFromRecordset rs
如果您要从Access复制的表只有一个字段(列),而Excel中的表只有一个标题(列),则不会出现此现象,但是对于我来说,它现在已出现在此多字段表中。
我觉得这是在实际上以某种方式创建记录集而不是在“粘贴”或分配方(Excel)上发生的情况。
'************************************************** *******************************
此SO贡献者解决的问题(将保留在此处,直到将其作为答案为止): https://stackoverflow.com/users/7296893/erik-a
在sql命令中使用ORDER BY:
cmdSQL2 = "SELECT * FROM " & myAccessTable & " ORDER BY " & primaryKey
从立即窗口中删除(删除变量,这样您可以更好地查看该命令,以了解那些新知识:
选择*从County_Directory订购[pID]
'************************************************** *******************************