【问题标题】:How to export in CSV with VBA?如何使用 VBA 导出 CSV?
【发布时间】:2016-12-06 09:15:27
【问题描述】:

我使用此功能以 CSV 格式导出数据范围:

Sub Fct_Export_CSV()
  Dim Value As String
  Dim size As Integer

  Value = ThisWorkbook.Path & "\Export_" & Sheets(1).range("B20").Value & ".csv"
  chemincsv = Value

  Worksheets("Database").Select
  Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
  Sep = ";"
  size = Worksheets("Database").range("B" & Rows.Count).End(xlUp).Row
  Set Plage = ActiveSheet.range("A1:G" & size)

  Open chemincsv For Output As #1
  For Each oL In Plage.Rows
    Tmp = ""
    For Each oC In oL.Cells
      Tmp = Tmp & CStr(oC.Text) & Sep
    Next
    Print #1, Tmp
  Next
  Close

  MsgBox "OK! Export to " & Value
End Sub

出口作品,但我也有一个“;”在每一行的末尾。

导出 CSV 示例:

文件夹;树;组;名字;姓氏;sAMAccountName;规则;
文件夹;树;DL-文件夹-R;John;TOTO;JTOT;R;

我在哪里修改此 VBA 脚本以生成不带“;”的 CSV在末尾 ?
我的目标:

文件夹;树;组;名字;姓氏;sAMAccountName;规则
文件夹;树;DL-文件夹-R;John;TOTO;JTOT;R

【问题讨论】:

  • 您的代码的一些提示: Dim chemincsv(如果尚未全局变暗);不要.Select 工作表,只需使用Worksheet("Database") 而不是ActiveSheetDim你所有的范围为Range;不要命名变量range(我怀疑你在某处做了,因为它在你的代码中没有大写)

标签: vba excel csv


【解决方案1】:

有多种方法可以做到这一点。 例如。如果迭代是最后一个迭代,你可以在Tmp = Tmp & CStr(oC.Text) & Sep 中添加一个 if 条件以不附加 sep。

另一种方法是使用左函数。在不修改大部分代码的情况下,我认为这将是一个好方法。 这是一个示例代码(没有尝试过):

Sub Fct_Export_CSV()
  Dim Value As String
  Dim size As Integer

  Value = ThisWorkbook.Path & "\Export_" & Sheets(1).range("B20").Value & ".csv"
  chemincsv = Value

  Worksheets("Database").Select
  Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
  Sep = ";"
  size = Worksheets("Database").range("B" & Rows.Count).End(xlUp).Row
  Set Plage = ActiveSheet.range("A1:G" & size)

  Open chemincsv For Output As #1
  For Each oL In Plage.Rows
    Tmp = ""
    For Each oC In oL.Cells
      Tmp = Tmp & CStr(oC.Text) & Sep
    Next


'take one less than length of the string number of characters from left, that would eliminate the trailing semicolon
    Tmp = left(Tmp, Len(Tmp)-1)

    Print #1, Tmp
  Next
  Close



  MsgBox "OK! Export to " & Value
End Sub

在最后一个打印语句之前添加了一行代码,应该可以工作。让我知道。

【讨论】:

  • 嗨,如果它对你有用,请接受答案:)
【解决方案2】:

如果您在将分号设置为本地分隔符的机器上工作,您可以将工作表保存为 csv 并指定 Local:=True

Worksheets("Database").SaveAs Filename:=Value, FileFormat:=xlCSV, Local:=True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多