Excel 一切正常,您有两种解决方案将其放入VBA
或者完全使用上面的代码;在这种情况下,只需复制连接字符串和查询即可简化操作 或者,这是我建议的,我们以前构建的表可以在VBA中非常轻松地更新 使用以下代码:Excel 一切正常,您有两种解决方案将其放入VBA,excel,vba,ms-access,Excel,Vba,Ms Access,或者完全使用上面的代码;在这种情况下,只需复制连接字符串和查询即可简化操作 或者,这是我建议的,我们以前构建的表可以在VBA中非常轻松地更新 使用以下代码: WorksheetWithTable.ListObjects(1).QueryTable.Refresh 您真的不需要超过这1行代码来进行刷新。 如果将查询设置为在修改单元格值时自动刷新,则根本不需要它 注意#1:您可以使用表名,而不是.ListObjects(1)中的索引。 节点#2:如果要在后台刷新查询,刷新有一个可选参数来驱动Tr
WorksheetWithTable.ListObjects(1).QueryTable.Refresh
您真的不需要超过这1行代码来进行刷新。如果将查询设置为在修改单元格值时自动刷新,则根本不需要它 注意#1:您可以使用表名,而不是
.ListObjects(1)
中的索引。节点#2:如果要在后台刷新查询,刷新有一个可选参数来驱动
True
表示VBA代码不会等待执行结束后再移动到下一条指令False显然是相反的。您可以尝试两件事:首先,将查询更改为具有。。。在#“&startdt&”和#“stopdt&”#ORDER BY…
(可能需要将日期格式化为worksheetfunction.text(startdt,“M/D/YYYY”)
)。如果这不起作用,请尝试在下一行的.Open Source:=…
后面添加一个.MoveFirst
。@FXD这两个选项似乎都不起作用:(.这与我的数据库是.mdb文件而不是.accdb文件有关吗?不,它与扩展名无关。请尝试ISO格式(“YYYY-MM-DD”
)可能吧。如果这仍然不起作用(您是否检查过Recordset.RecordCount
btw?),您是否反对Excel数据连接(即在不使用VBA的情况下获取电子表格中的数据)?@FXD不反对Excel数据连接,这不适用于我,而是适用于我工作地点的另一个团队。请注意,在范围(“A1”)行中.Offset(1,0).CopyFromRecordset记录集
,范围(“A1”)
中的引号是错误的unicode字符。它必须是范围(“A1”)
您可以尝试的两件事:首先,将查询更改为具有…介于#“&startdt&”和#“stopdt&”和#ORDER BY…
(可能需要将日期格式化为工作表函数.text(startdt,“M/D/YYYY”)
)。如果这不起作用,请尝试在下一行的后面添加一个。MoveFirst
。开源:=…
。@FXD这两个选项似乎都不起作用:(.这与我的数据库是.mdb文件而不是.accdb文件有关吗?不,它与扩展名无关。也许可以尝试ISO格式(“YYYY-MM-DD”
)。如果仍然不起作用(您是否检查了记录集.RecordCount
btw?),是否有任何与Excel数据连接不符的地方(即,在不使用VBA的情况下获取电子表格中的数据)@FXD不支持Excel数据连接,这不适用于我,而是适用于我工作地点的另一个团队。请注意,在范围(“A1”).Offset(1,0).CopyFromRecordset记录集
行中,范围(“A1”)中的引号
是错误的unicode字符。它必须是范围(“A1”)
Sub getdatamdb()
Dim cn As Object, rs As Object
Dim intColIndex As Integer
Dim DBFullName As String
Dim TargetRange As Range
10 DBFullName = "X:\MyDocuments\CMS\CMS Database.mdb"
20 On Error GoTo Whoa
30 Application.ScreenUpdating = False
40 Set TargetRange = Sheets("Sheet1").Range("A1")
50 Set cn = CreateObject("ADODB.Connection")
60 cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"
70 Set rs = CreateObject("ADODB.Recordset")
80 rs.Open "SELECT * FROM Tracking WHERE [Date_Logged] BETWEEN #" & startdt & "# AND #" & stopdt & "# ORDER BY [Date_Logged]", cn, , , adCmdText
' Write the field names
90 For intColIndex = 0 To rs.Fields.Count - 1
100 TargetRange.Offset(1, intColIndex).Value = rs.Fields(intColIndex).Name
110 Next
' Write recordset
120 TargetRange.Offset(1, 0).CopyFromRecordset rs
LetsContinue:
130 Application.ScreenUpdating = True
140 On Error Resume Next
150 rs.Close
160 Set rs = Nothing
170 cn.Close
180 Set cn = Nothing
190 On Error GoTo 0
200 Exit Sub
Whoa:
210 MsgBox "Error Description :" & Err.Description & vbCrLf & _
"Error at line :" & Erl & vbCrLf & _
"Error Number :" & Err.Number
220 Resume LetsContinue
End If
End Sub
WorksheetWithTable.ListObjects(1).QueryTable.Refresh