Function VBA-解析CSV函数,获取函数的输出
我有一个代码(请参见下文)来解析csv文件。在函数之后,我想使用该数据,但我不确定函数的输出是什么,或者如何使用它?基本上,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
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