有没有最快的方法将记录集结果写入 Excel table?
Is there a fastest way to write recordset results in an Excel table?
我对 Stack Overflow 和 VBA 很陌生,所以请原谅。
For x = 1 To Rows
For y = 1 To rs.Fields.Count
Select Case rs.Fields(y - 1)
Case rs![begin_date], rs![end_date]
Z = CDate(rs.Fields(y - 1))
Case rs![deadline_date]
If rs![update_date] = "" Or IsNull(rs![update_date]) Then
Z = Calculate_deadline(rs![begin_date], rs![sla], _
rs![special_calendar])
Else
Z = Calculate_deadline(rs![update_date], rs![sla], _
rs![special_calendar])
End If
Case Else
Z = rs.Fields(y - 1)
End Select
table_list_object.HeaderRowRange.Cells(x + 1, y).Value = Z
Next y
rs.MoveNext
Next x
所以,简而言之,我在 Access 中编写了一个 VBA 代码,该代码执行查询以收集有关所有项目日期的数据,计算其截止日期并将所有这些写在 Excel table.
函数部分计算截止日期。
问题是,我把每一个数据都一个一个写出来,像这样:
table_list_object.HeaderRowRange.Cells(x + 1, y).Value = z
这可能需要一段时间,我很确定这确实会大大降低我的宏速度,但我看到的每个 VBA 教程都是这样。
而且我对 Select Case
有点怀疑......那样更好,还是我应该改用 If ... Else
?
无论如何,这个 Recordset 有 15.000 行,但它需要几个小时才能执行,而我第一次 运行 这段代码只花了几分钟。
哦,顺便说一句,Calculate_deadline
也可能是问题所在,我知道。但是我想先确定我的这部分代码,只是为了不让这个问题太大太复杂而无法解释。
谢谢!
Vitor,由于您是 VBA 的新手,我建议您在 Excel 中考虑另一种方法。 Excel 有一个 "Get Data" 函数,它使用称为 Power Query 的技术将数据拉入 Excel,对其进行操作,然后将操作后的数据保存到 sheet 中21=] 工作簿。所有这些都使用点击界面,而不是编写低级 VBA 代码。
以下面为例:
https://www.youtube.com/watch?v=vchsUEHXvZo
该函数简单易学,具有常用的数据操作函数,如过滤数据、聚合数据、添加新的计算列、转置数据等
只需 google "Power Query",即可浏览视频和其他资源。
我对 Stack Overflow 和 VBA 很陌生,所以请原谅。
For x = 1 To Rows
For y = 1 To rs.Fields.Count
Select Case rs.Fields(y - 1)
Case rs![begin_date], rs![end_date]
Z = CDate(rs.Fields(y - 1))
Case rs![deadline_date]
If rs![update_date] = "" Or IsNull(rs![update_date]) Then
Z = Calculate_deadline(rs![begin_date], rs![sla], _
rs![special_calendar])
Else
Z = Calculate_deadline(rs![update_date], rs![sla], _
rs![special_calendar])
End If
Case Else
Z = rs.Fields(y - 1)
End Select
table_list_object.HeaderRowRange.Cells(x + 1, y).Value = Z
Next y
rs.MoveNext
Next x
所以,简而言之,我在 Access 中编写了一个 VBA 代码,该代码执行查询以收集有关所有项目日期的数据,计算其截止日期并将所有这些写在 Excel table.
函数部分计算截止日期。
问题是,我把每一个数据都一个一个写出来,像这样:
table_list_object.HeaderRowRange.Cells(x + 1, y).Value = z
这可能需要一段时间,我很确定这确实会大大降低我的宏速度,但我看到的每个 VBA 教程都是这样。
而且我对 Select Case
有点怀疑......那样更好,还是我应该改用 If ... Else
?
无论如何,这个 Recordset 有 15.000 行,但它需要几个小时才能执行,而我第一次 运行 这段代码只花了几分钟。
哦,顺便说一句,Calculate_deadline
也可能是问题所在,我知道。但是我想先确定我的这部分代码,只是为了不让这个问题太大太复杂而无法解释。
谢谢!
Vitor,由于您是 VBA 的新手,我建议您在 Excel 中考虑另一种方法。 Excel 有一个 "Get Data" 函数,它使用称为 Power Query 的技术将数据拉入 Excel,对其进行操作,然后将操作后的数据保存到 sheet 中21=] 工作簿。所有这些都使用点击界面,而不是编写低级 VBA 代码。
以下面为例: https://www.youtube.com/watch?v=vchsUEHXvZo
该函数简单易学,具有常用的数据操作函数,如过滤数据、聚合数据、添加新的计算列、转置数据等
只需 google "Power Query",即可浏览视频和其他资源。