Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Function VBA-解析CSV函数,获取函数的输出_Function_Vba_Parsing_Csv - Fatal编程技术网

Function VBA-解析CSV函数,获取函数的输出

Function VBA-解析CSV函数,获取函数的输出,function,vba,parsing,csv,Function,Vba,Parsing,Csv,我有一个代码(请参见下文)来解析csv文件。在函数之后,我想使用该数据,但我不确定函数的输出是什么,或者如何使用它?基本上,csv有一列数字,我想在我的主工作表中复制,但是在功能完成后,我如何在子环境中复制/粘贴数据 非常感谢 Function ParsefileAsTable(ByVal sNomFichier As String) As Variant Dim Chaine As String Dim Ar() As String Dim var As Variant Dim nbligne

我有一个代码(请参见下文)来解析csv文件。在函数之后,我想使用该数据,但我不确定函数的输出是什么,或者如何使用它?基本上,csv有一列数字,我想在我的主工作表中复制,但是在功能完成后,我如何在子环境中复制/粘贴数据

非常感谢

Function ParsefileAsTable(ByVal sNomFichier As String) As Variant
Dim Chaine As String
Dim Ar() As String
Dim var As Variant
Dim nblignes As Long
Dim nbcol As Long
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1

    Separateur = ","
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Close
    NumFichier = FreeFile

    iRow = 0
    Open sNomFichier For Input As #NumFichier

    Do While Not EOF(1)
        Line Input #NumFichier, Chaine
        nblignes = nblignes + 1
        Ar = Split(Chaine, Separateur)
        nbcol = UBound(Ar) + 1
    Loop
    Close #NumFichier

ReDim var(1 To nblignes, 1 To nbcol)

iRow = 0
    Open sNomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
                iCol = 1: iRow = iRow + 1
                Line Input #NumFichier, Chaine
                Ar = Split(Chaine, Separateur)
                For i = LBound(Ar) To UBound(Ar)
                    If Not iCol > nbcol Then
                        var(iRow, iCol) = Ar(i)
                        iCol = iCol + 1
                    End If
                Next
        Loop
    Close #NumFichier

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

ParsefileAsTable = var

End Function

函数的输出是由函数本身定义的类型变量

Function ParsefileAsTable(ByVal sNomFichier As String) As Variant
函数的返回值是变量
var
,在
结束函数
之前分配:

ParsefileAsTable = var
您可以通过调用子例程将其放入这样的工作表中(通常建议使用函数仅返回值,而不是操作工作表对象):

编辑我对上述行进行了修改,以处理基于1的数组(通常为0)


您收到的错误是因为
var
不是调用过程中定义的变量,因此上面的修订版实例化了该变量,然后分配函数的返回值。然后,我们使用
var
确定范围大小(使用
Resize
方法),并将数组打印到该范围。

非常感谢您的快速回复!但是当我写的时候,它说类型不匹配?你能再解释一下最后一段代码吗?基本上,我想将这些数据复制到主excel表格的一列中,请参见我的修订和说明。这是我的代码中的一个错误,但我认为修订版应该适合你。那更好,谢谢!然而,在两列被改变后,第三列也发生了奇怪的变化,但只有一列,你知道为什么会发生这种情况吗?我在范围内选择D3,D列和E列都发生了变化,但最后一个问题是,有一个带日期的单元格,解析函数的每个文件都有不同的日期,我是否希望代码读取带日期的单元格并在文件字符串中添加,可以这样做吗?谢谢我不打算回答有关数字“53”、“53000”或“53000”的问题。Tehse完全超出了您原始问题的范围。请感谢我免费为您提供的帮助,而无休止的后续问题表明您不了解您正在做的任何事情。你需要自己学习。
Dim var as Variant
var = ParseFileAsTable("C:\mon_fichier.txt")

Range("A1").Resize(UBound(var, 1), UBound(var, 2)).Value = _
    var