【发布时间】:2022-01-12 16:12:49
【问题描述】:
我有一些代码可以将表格加载到数组中,进行一些计算,创建新工作表,将更改后的数组写入新工作表,并将新工作表保存为 CSV。
我需要一个 CSV,因为这是目标系统接受的唯一格式。
我想知道是否可以直接将数组写入 CSV,跳过 2 个步骤。
通过我的研究,我从THIS POST 找到了以下代码,但是我无法让它工作。
' SaveAsCSV saves an array as csv file. Choosing a delimiter different as a comma, is optional.
'
' Syntax:
' SaveAsCSV dMyArray, sMyFileName, [sMyDelimiter]
'
' Examples:
' SaveAsCSV dChrom, app.path & "\Demo.csv" --> comma as delimiter
' SaveAsCSV dChrom, app.path & "\Demo.csv", ";" --> semicolon as delimiter
'
' Rev. 1.00 [8 jan 2003]
' written by P. Wester
' wester@kpd.nl
Public Sub SaveAsCSV(MyArray() As Variant, sFilename As String, Optional sDelimiter As String = ",")
Dim n As Long 'counter
Dim M As Long 'counter
Dim sCSV As String 'csv string to print
On Error GoTo ErrHandler_SaveAsCSV
'check extension and correct if needed
If InStr(sFilename, ".csv") = 0 Then
sFilename = sFilename & ".csv"
Else
While (Len(sFilename) - InStr(sFilename, ".csv")) > 3
sFilename = Left(sFilename, Len(sFilename) - 1)
Wend
End If
'If MultiDimensional(MyArray()) = False Then '1 dimension
'save the file
' Open sFileName For Output As #7
' For n = 0 To UBound(MyArray(), 1)
' Print #7, Format(MyArray(n, 0), "0.000000E+00")
' Next n
' Close #7
'Else 'more dimensional
'save the file
Open sFilename For Output As #7
For n = 1 To UBound(MyArray(), 1)
sCSV = ""
For M = 1 To UBound(MyArray(), 2)
sCSV = sCSV & Format(MyArray(n, M)) & sDelimiter
Next M
sCSV = Left(sCSV, Len(sCSV) - 1) 'remove last Delimiter
Print #7, sCSV
Next n
Close #7
'End If
Exit Sub
ErrHandler_SaveAsCSV:
Close #7
使用这种语法
SaveAsCSV arOut, Application.ActiveWorkbook.Path & "\Demo.csv"
我在该行收到此错误。类型不匹配:需要数组或用户定义类型。 我可以通过编辑这一行并删除括号来解决这个问题。
Public Sub SaveAsCSV(MyArray() As Variant, sFilename As String, Optional sDelimiter As String = ",")
改为
Public Sub SaveAsCSV(MyArray As Variant, sFilename As String, Optional sDelimiter As String = ",")
但是这只会创建一个空白文件,因为这里现在有一个错误。这会触发错误处理。
我想不通的是,当我在监视窗口中观看 MyArray 时,它会按照应有的方式填充,所以我无法弄清楚这个错误。任何帮助表示赞赏
【问题讨论】:
-
删除
() -
@ScottCraner 这似乎奏效了!谢谢!