Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 将csv文件作为记录集返回_Excel_Vba - Fatal编程技术网

Excel 将csv文件作为记录集返回

Excel 将csv文件作为记录集返回,excel,vba,Excel,Vba,我有一个外部程序,可以将数据导出到CSV文件中。我的用户希望通过excel中的VBA函数访问此数据。为此,我考虑将读取的CSV文件包装到一个返回ADODB.Recordset的函数中。我的代码是 Public Function getData(fileName As String) As ADODB.Recordset Dim path As String path = "C:\testDir\" Dim cN As New ADODB.Connection Dim RS As New ADOD

我有一个外部程序,可以将数据导出到CSV文件中。我的用户希望通过excel中的VBA函数访问此数据。为此,我考虑将读取的CSV文件包装到一个返回ADODB.Recordset的函数中。我的代码是

Public Function getData(fileName As String) As ADODB.Recordset
Dim path As String
path = "C:\testDir\"
Dim cN As New ADODB.Connection
Dim RS As New ADODB.Recordset
cN.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & path & ";" & _
               "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
RS.ActiveConnection = cN
RS.Source = "select * from " & fileName
Set getData = RS
End Function
我正在尝试使用调用此函数

Dim a As ADODB.Recordset
Set a = getData("testFile.csv")
a.Open()

此时,我得到一个编译错误,应该是“=”。有人能告诉我应该如何调用函数并循环数据吗

通过我自己的一些调整以及Tim Williams的输入解决了这个问题。以下是可能需要帮助的其他人的代码

Public Function getData(fileName As String) As ADODB.Recordset

    Dim path As String
    path = "C:\testDir\"
    Dim cN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Set cN = new ADODB.Connection
    Set RS = new ADODB.Recordset
    cN.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & path & ";" & _
                   "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""")
    RS.ActiveConnection = cN
    RS.Source = "select * from " & fileName
    Set getData = RS

End Function
现在,该函数可以被称为

Dim a As ADODB.Recordset
Set a = getData("testFile.csv")
a.Open
MsgBox(a.GetString())
a.Close

a.打开
(不带括号)。请参见@TimWilliams-您可以将您的评论重新键入aswer,以便我可以接受它吗?@CP-您可以接受您自己的答案-对我来说没有问题…解析函数内部的记录集并返回字符串或数组,而不必在创建它的函数外部打开记录集。@JimmyPena-数组会更好肯定比返回记录集更干净。我还有一个函数的第二个实现,它将记录集转换为数组,但没有将其添加到解决方案中,因为它不是原始问题的一部分。但是我更喜欢阵列。我同意,这里应该有一系列帮助函数。此外,还需要
Provider=Microsoft.ACE.OLEDB.12.0而不是Jet