在VBA中从数组创建CSV

在VBA中从数组创建CSV,vba,csv,outlook,Vba,Csv,Outlook,我是一个新手程序员,尝试自动化一些重复的工作任务,这些任务应该由一个聪明的脚本而不是人工来完成。我已经做了一些VBA和Java,但是非常基本的东西 我们有一些由经过验证的在线表单生成的数据,该表单通过电子邮件发送到邮箱,然后邮件客户端(Outlook 2010)中的过滤器将其放入特定文件夹。我的目的是编写一些VBA,触发时将检查该文件夹的内容,然后对于每个邮件项目,将邮件正文文本作为字符串获取,创建一个数组,然后将数组内容写入.csv文件。然后,我将让另一个应用程序(iMacros for Fi

我是一个新手程序员,尝试自动化一些重复的工作任务,这些任务应该由一个聪明的脚本而不是人工来完成。我已经做了一些VBA和Java,但是非常基本的东西

我们有一些由经过验证的在线表单生成的数据,该表单通过电子邮件发送到邮箱,然后邮件客户端(Outlook 2010)中的过滤器将其放入特定文件夹。我的目的是编写一些VBA,触发时将检查该文件夹的内容,然后对于每个邮件项目,将邮件正文文本作为字符串获取,创建一个数组,然后将数组内容写入.csv文件。然后,我将让另一个应用程序(iMacros for Firefox)读取csv,并与内部企业Web应用程序交互以完成其余工作

我想除了将数组内容写入csv之外,我可以完成所有这些

我通过查看代码示例(我确实试图理解MS对象模型文档)工作得最好,但我能找到的将VBA数组写入CSV的最佳方法如下:

  '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
我认为这是VB而不是VBA,但是这里的总体想法有效吗?或者,如果其他任何人有一个代码示例让我开始或任何其他指针,我将非常感激


PS也看到了,但无法理解它。

我不使用VB,因此我不确定是否打开了输出文件#7,但如果这样做有效(使用一些随机输出进行测试),则您的代码片段是正确的。唯一的问题是,您应该在另一个打印调用中添加“,”

只要确保在上一次迭代中不添加“,”。您可以通过添加一个If语句来检查n=UBound(MyArray)-1(这是最后一个元素的索引)是否正确

希望有帮助


PM

下面的代码用于转换CSV中的二维数组。我还没有写代码,但是已经测试过了,它可以工作了

' 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