将数据数组项目分配给范围值的最快方法是什么?

我正在开发一个SQL Server数据库的Excel客户端。

当我从数据库中select数据到客户端时,logging被保存在数组中。 这些数组然后使用variables数组“注入”到Excel工作表中。

这种技术比分配单独的单元格值要快得多,但是在某些特定的上下文中似乎失败了。

当数据值为vbNullString时,与该项目对应的范围单元格未被分配。 最糟糕的是,如果第一个项目是vbNullString,没有任何项目被保存到范围。 我的猜测是,作为变体,vbNullString被转换为空,而变体数组有错误的维度。

还有其他解释吗?

例如

ByRef loTable As ListObject, ByRef sItems() As String 

是执行以下代码的子参数,其中loTable是Excel表(ListObject),sItems是要分配给Excel表范围的数据loTable

 Dim lCount as Long Dim vItems() as Variant lCount = UBound(sItems)-LBound(sItems)+1 'size vItems as a 2D array - required to fetch a range If (lCount > 0) Then ReDim vItems(1 To lCount, 1 To 1) 'copy string to variant Dim i As Integer For i = LBound(sItems) To UBound(sItems) vItems(i, 1) = sItems(i) Next i Dim olrs As ListRows Set olrs = loTable.ListRows With loTable If (lCount > 0) Then If (Not (.DataBodyRange Is Nothing)) Then .DataBodyRange.Delete olrs.Add If (lCount = 1) Then olrs(olrs.Count).Range.Cells(1, 1).Value = sItems(LBound(sItems)) Else .DataBodyRange.Resize(lCount, 1).Value = vItems End If Else .DataBodyRange.Delete End If End With 'loTable 

我来到这个问题:你有没有尝试过这样一个范围(表格)的值赋值,以及如何处理数组中的空项目以进行快速赋值。 遍历数组项并逐个添加只需要永远。

会有这样的帮助吗?

 'Declarations section Private Const gsPROVIDER as String = [Provider] Private Const gsDATA_SOURCE as String = [Source] Private Const gsINITIAL_CATALOG as String = [Catalog] Private Const gsUSER_ID as String = [User ID] Private Const gsPASSWORD as String = [Password] Private Sub Test Dim rsData As Object Dim sConnect As String Dim sSQL As String sConnect = "Provider=" & gsPROVIDER & _ "Data Source=" & gsDATA_SOURCE & _ "Initial Catalog=" & gsINITIAL_CATALOG & _ "User ID=" & gsUSER_ID & _ "Password=" & gsPASSWORD sSQL = 'SQL in a string Set rsData = CreateObject("ADODB.Recordset") rsData.Open sSQL, sConnect If Not rsData.EOF Then Worksheets(1).ListObjects(loTable).DataBodyRange.CopyFromRecordset rsData Else MsgBox "No data found!", vbCritical, "Error!" End If rsData.Close Set rsData = Nothing End Sub