【问题标题】:my macro creates a carriage return at the end of my csv .txt output and can't figure out why我的宏在 csv .txt 输出的末尾创建了一个回车符,但不知道为什么
【发布时间】:2019-11-04 04:24:24
【问题描述】:

我的 excel 文件有 3 张工作表,一张包含大量静态数据(我们称之为 Build Status),一张接受数据输入(我们称之为 Input),一张从 Build Status 返回数据使用基于输入工作表中的值的 IF 和 VLOOKUP 函数的工作表(我们将此工作表称为输出)。我的输出表有静态标题,我的宏从输出表创建一个 csv(宏绑定到一个按钮)。由于某种原因,我的 .txt 文件(csv 保存为 .txt)的末尾有一个回车,我必须删除它才能让另一个程序的 HMI 接受上传格式。任何有关摆脱退货或创建退货原因的帮助将不胜感激。

无论输出为 .csv 还是 .txt(csv 格式),在文本编辑器中查看时都有回车。

Option Explicit

Sub CreateCSV()
    Dim wbI As Workbook, wbO As Workbook
    Dim wsI As Worksheet, wsO As Worksheet
    Dim jLastRow As Long
    Dim LDate As String

    '~~> Set a format for current date
    LDate = Format(Date, "mm-dd-yyyy")

    '~~> Source/Input Workbook
    Set wbI = ThisWorkbook

    '~~> Set the relevant sheet from where you want to copy
    Set wsI = wbI.Sheets("OUTPUT")

    '~~> Sets an integer value for the last row of data being copied
    jLastRow = wsI.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    '~~> Destination/Output Workbook
    Set wbO = Workbooks.Add

    With wbO
        '~~> Set the relevant sheet to paste to
        Set wsO = wbO.Sheets("Sheet1")

        '~~> Copy the range
        wsI.Range("A1:Z" & jLastRow).Copy

        '~~> Paste it in Cell A1.
        wsO.Range("A1").PasteSpecial Paste:=xlPasteValues

        '~~>. Save the file
        .SaveAs Filename:="\\TestFolder\TestRecipe" & LDate & ".txt", FileFormat:=xlCSV

        '~~> Clear Clipboard
        Application.CutCopyMode = False
    End With
End Sub

预期:在名为 TestRecipe(Date) 的 .txt 文件中创建逗号分隔值,该文件适用于第三方软件。

实际:文件创建、名称和格式有效,但文件末尾有回车符,防止文件上传到第三方软件。一旦我手动删除它,它就可以正常上传。

【问题讨论】:

  • 您可以尝试converting the range to a CSV string,而不是使用.SaveAs FileFormat:=xlCSV,然后删除最后一个回车符,然后将结果字符串写入文本文件。
  • 我没有尝试这样做是因为找到了手头的真正问题,但它可能对其他人有用。谢谢!

标签: excel vba


【解决方案1】:

可能会故意添加 CR 和 LF。无论如何,如果是这样,这应该可以治愈它:)

function remove_lastwhitespace_if_any (S as string ,optional tester as string = vbtab & vbcr & vblf & " ") as string 
    if len(s) =0 then exit function

    while instr(tester,right(s,1) ) > 0 
       S=left(s,len(s)-1)
    wend

    remove_lastwhitespace_if_any=s
end function

【讨论】:

  • 虽然我确实使用了这个解决方案,但我发现手头的真正错误是如果文件同时打开,HMI 将不接受上传。我的宏在循环结束时打开了 .csv 文件,所以我认为删除回车有效的原因是因为我会手动删除它,保存并关闭。就好像我只是在我的宏创建文件后尝试上传一样,它不会因为它仍然处于打开状态。感谢您的回复,对于我的延误,我深表歉意。
  • :) 没问题 - 迟到总比永远好 ;) 我很高兴你找到了你的棘手错误 :)
猜你喜欢
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多