【问题标题】:Excel VBA/Macro removing unwanted commas from .txt fileExcel VBA/Macro 从 .txt 文件中删除不需要的逗号
【发布时间】:2017-07-13 04:43:01
【问题描述】:

我在 excel vba 中编写了一个宏/一段代码,以将当前工作表发送到 .txt 格式的特定电子邮件,但是当我收到电子邮件时,文件中列出了几个不需要的逗号,我只是想当文件在电子邮件中发送时,可能会找到一段代码来删除这些额外的逗号。我目前创建了另一个宏,它打开并读取文件并删除不需要的逗号,但我必须先保存电子邮件附件,而我只想将干净的 .txt 文件直接接收到我的电子邮件中。

我收到的当前 .txt 文件如下所示;

S99,2602,7/12/2017,
10405,PUSH NUT PLAIN 1/4,2.000,EACH
WVC424,CORD 2.2MM E/S CHESTNUT,3.800,MTR
,,,

而我需要它看起来像;

S99,2602,7/12/2017
10405,PUSH NUT PLAIN 1/4,2.000,EACH
WVC424,CORD 2.2MM E/S CHESTNUT,3.800,MTR

为了它被读入我们的系统。

Sub EmailAsCSV()
'
' EmailAsCSV Macro
'
 Dim csvFiles(1 To 3) As String, i As Integer
    Dim wsName As Variant
    Dim OutApp As Object, OutMail As Object




    i = 0
    For Each wsName In Array("Sheet1")     'sheet names to be emailed - CHANGE THE SHEET NAMES
        i = i + 1
        csvFiles(i) = ThisWorkbook.Path & "\" & wsName & ".txt"
        ThisWorkbook.Worksheets(wsName).Copy
        ActiveWorkbook.SaveAs csvFiles(i), FileFormat:=xlCSV
        ActiveWorkbook.Close False
    Next


    'Email the .csv files

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = ThisWorkbook.Worksheets("Sheet2").Range("E1").Value     'cell containing email address - CHANGE THE SHEET NAME AND CELL
        .CC = ""
        .BCC = ""
        .Subject = "Order"
        .Body = "This email contains 1 file attachment with an order."
        .Attachments.Add csvFiles(1)

        .Send
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

    'Delete the .csv files

    Kill csvFiles(1)

'
End Sub

Sub test()
    Dim fn As String, txt As String
    fn = Application.GetOpenFilename("TextFiles,*.txt")
    If fn = "" Then Exit Sub
    txt = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll
    With CreateObject("VBScript.RegExp")
        .Global = True: .MultiLine = True
        .Pattern = ",+$"
        Open Replace(fn, ".txt", "_Clean.txt") For Output As #1
            Print #1, .Replace(txt, "")
        Close #1
    End With
End Sub

上面列出了我目前得到的代码。

【问题讨论】:

  • 我猜不需要的逗号在每一行的右边。这些代表 Excel 认为 正在使用的空列,并且必须包含在导出中。隔离您要导出的区域或编写一个独立生成 CSV 的循环。

标签: vba excel


【解决方案1】:

尝试将其保存为文本格式?

FileFormat:=xlText

【讨论】:

  • 这删除了所有逗号,而不仅仅是不需要的逗号
  • 获得这些额外逗号的原因很可能是因为数据末尾的单元格中有空格。在保存文件之前,您需要处理数据并删除其中包含空格的单元格。
  • 您可能还想研究如何将特定范围的单元格保存到 CSV 文件中,但无论哪种方式,您都必须有一些代码可以检测到数据是。
  • 多余的逗号不是由带有空格的单元格引起的。 Excel 尝试猜测正在写出的列数,然后插入必要的逗号以将输出填充到该列数。因此,单元格 D2 中有内容这一事实使 Excel 决定也写出单元格 D1,即使它是空的。
【解决方案2】:

您可以只复制使用过的范围(未测试):

ThisWorkbook.Worksheets(wsName).UsedRange.CurrentRegion.Copy
With Workbooks.Add
    .Sheets(1).Paste
    .SaveAs csvFiles(i), FileFormat:=xlCSV
    .Close False
End With

或粘贴不带格式的值(也未经测试):

ThisWorkbook.Worksheets(wsName).UsedRange.Copy
With Workbooks.Add
    ActiveCell.PasteSpecial xlPasteValues
    .SaveAs csvFiles(i), FileFormat:=xlCSV
    .Close False
End With

【讨论】:

  • 我测试了这两种方法,但两种方法都不起作用,第一段代码只给出相同的输出,第二段删除了每个逗号。
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 2018-04-01
  • 2014-06-26
  • 2022-01-23
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多