Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access 2013-读取Excel数据的最快方式_Excel_Ms Access_Vba_Ms Access 2013 - Fatal编程技术网

Access 2013-读取Excel数据的最快方式

Access 2013-读取Excel数据的最快方式,excel,ms-access,vba,ms-access-2013,Excel,Ms Access,Vba,Ms Access 2013,我的访问代码的一部分是从现有excel文件中读取数据。我已经能够弄明白怎么做了,但这需要很长时间来处理。excel文件大约有400行,我只是从两列中获取数据并将其放入多维数组中 Dim excelapp As Excel.Application Dim strBxNum As String: strBxNum = "bx" & strInd Dim i As Integer Dim r As Integer Set excelapp = CreateObject("Excel.Appli

我的访问代码的一部分是从现有excel文件中读取数据。我已经能够弄明白怎么做了,但这需要很长时间来处理。excel文件大约有400行,我只是从两列中获取数据并将其放入多维数组中

Dim excelapp As Excel.Application
Dim strBxNum As String: strBxNum = "bx" & strInd
Dim i As Integer
Dim r As Integer
Set excelapp = CreateObject("Excel.Application")
Dim WkBk As Excel.Workbook
Set WkBk = excelapp.Workbooks.Open(fileName:=strFileName)

i = 6
r = 0

Do While WkBk.Sheets(3).Range("C" & i) <> ""
  strWriteUp(r, 0) = WkBk.Sheets(3).Range("C" & i)
  strWriteUp(r, 1) = WkBk.Sheets(3).Range("P" & i)

  i = i + 1
  r = r + 1
Loop
Dim excelapp作为Excel.Application
将strBxNum设置为字符串:strBxNum=“bx”&strInd
作为整数的Dim i
作为整数的Dim r
设置excelapp=CreateObject(“Excel.Application”)
将WkBk设置为Excel.工作簿
设置WkBk=excelapp.Workbooks.Open(文件名:=strFileName)
i=6
r=0
“在工作时做作业表(3).范围(“C”和“i”)
strWriteUp(r,0)=WkBk.表(3).范围(“C”和“i”)
strWriteUp(r,1)=WkBk.表(3).范围(“P”和i)
i=i+1
r=r+1
环

有更有效的方法吗?

逐单元操作往往比使用数组一次性读取范围慢得多(尤其是跨应用程序边界)

例如

这将为您提供两个基于1的二维数组(1到#行,1到1),您可以按原样使用,也可以循环并合并到单个二维数组中

编辑将arrP放入arrC:

Dim n As Long, nR as Long

nR = ubound(arrC, 1)
ReDim Preserve arrC(1 to nR, 1 to 2)
For n = 1 to nR
    arrC(n, 2) = arrP(n, 1)
next n

最终目标是什么?您如何处理阵列?Access可以直接阅读查询中的工作簿!将Access中的工作表链接为链接表可能要快得多。然后使用代码读取此文件,以筛选请求的数据。没有样本数据,很难更具体。最终目标是比较两个电子表格的差异。在读了你的两条评论后,我觉得有更好的方法。我对VBA还比较陌生,你能提供一个到其他选项的链接吗?这确实运行得更快。因此,我试图通过一个简单的“MsgBox arrP(2)”行来检查数据是否进入数组,但在该行上会出现“下标超出范围”错误。我做了一个UBound,数组大小看起来不错,但不确定为什么我不能检查数据。
MsgBox arrP(2,1)
-这是一个二维数组。好的,我试过了……但无法理解如何“循环并合并成单个二维数组”。
Dim n As Long, nR as Long

nR = ubound(arrC, 1)
ReDim Preserve arrC(1 to nR, 1 to 2)
For n = 1 to nR
    arrC(n, 2) = arrP(n, 1)
next n