有没有最快的方法在Excel表中写入记录集结果?

时间:2018-09-21 18:12:26

标签: vba ms-access access-vba recordset

我对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可能也是问题。但是我想首先确定我的代码的这一部分,只是为了不使这个问题变得太大和复杂而难以解释。

谢谢!

1 个答案:

答案 0 :(得分:0)

Vitor,由于您是VBA的新手,所以建议您考虑另一种在Excel中执行此操作的方法。 Excel具有“获取数据”功能,该功能使用称为Power Query的技术将数据提取到Excel中,进行处理,然后将处理后的数据保存到Excel工作簿中的工作表中。所有这些都使用点击界面,而不是编写底层VBA代码。

请参见以下示例: https://www.youtube.com/watch?v=vchsUEHXvZo

此功能非常易于学习,并具有常见的数据处理功能,例如过滤数据,汇总数据,添加新的计算列,转置数据等。

只需使用Google“ Power Query”,然后在那里浏览视频和其他资源即可。