我对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代码,该代码执行Query来收集有关所有项目日期的数据,计算其截止日期,并将所有结果写入Excel表。
功能部分计算截止日期。
问题是,我像这样逐个写入每个数据:
table_list_object.HeaderRowRange.Cells(x + 1, y).Value = z
这可能需要一段时间,而且我敢肯定这确实会减慢我的宏的速度,但是我看到的每个VBA教程都这样做了。
我对Select Case
有点怀疑……是不是更好呢?还是应该使用If ... Else
?
无论如何,该记录集有15.000行,但是执行需要花费数小时,而我第一次运行此代码只花了几分钟。
哦,我知道Calculate_deadline
可能也是问题。但是我想首先确定我的代码的这一部分,只是为了不使这个问题变得太大和复杂而难以解释。
谢谢!
答案 0 :(得分:0)
Vitor,由于您是VBA的新手,所以建议您考虑另一种在Excel中执行此操作的方法。 Excel具有“获取数据”功能,该功能使用称为Power Query的技术将数据提取到Excel中,进行处理,然后将处理后的数据保存到Excel工作簿中的工作表中。所有这些都使用点击界面,而不是编写底层VBA代码。
请参见以下示例: https://www.youtube.com/watch?v=vchsUEHXvZo
此功能非常易于学习,并具有常见的数据处理功能,例如过滤数据,汇总数据,添加新的计算列,转置数据等。
只需使用Google“ Power Query”,然后在那里浏览视频和其他资源即可。