从[excel][vba]中删除txt导出中的空行

  • 本文关键字:删除 excel vba txt excel vba
  • 更新时间 :
  • 英文 :


VBA不是最好的,但我将提供一些上下文来帮助解释这个可能很愚蠢的问题。

我工作的地方有一个糟糕的系统,所以我们倾向于按照自己的方式做事,尽可能少地使用这个系统。我们希望能够在需要的时候从客户那里直接借记,为此,我们需要创建一个"BACS Standard 18"文件上传到银行,以便收集直接借记。该文件要求有关于交易的特定信息,并且必须以非常特定的方式在记事本(txt(中显示。

我设法创建了一个Excel文件,我们的财务团队可以使用它来创建文件,但当创建文件时,输入光标总是在导出文本下的几行。

我需要导出文本,并且键入光标位于文本最后一行的末尾,或者至少不在下面。如果它在它下面,银行会将其视为空行,不接受该文件。文件中的行数也总是不同的。我在屏幕截图中附上了一个文件的例子。高亮显示的部分是文件应该包含的内容,但正如您所看到的,键入光标低了两行。有人能帮我解释一下我哪里出了问题吗。非常感谢。导出文件

以下是用于构建文件并将数据从excel导出到记事本的[vba]:

Sub Build_BACS()
LastRow = (Worksheets("Input").Range("Q2"))
'Header
ActiveSheet.Range("A1").Value = "=""VOL1""&Home!D5&""                               ""&Home!D2&""                                ""&""1"""
ActiveSheet.Range("A2").Value = "=""HDR1A""&Home!D2&""S""&""         ""&Home!D5&""00010001       ""&Home!D8&"" ""&Home!E8&"" 000000                    """
ActiveSheet.Range("A3").Value = "=""HDR2F02000""&Home!B11&""                                   00                            """
ActiveSheet.Range("A4").Value = "=""UHL1 ""&Home!D8&""999999    000000001 DAILY  001                                        """
'Middle
ActiveSheet.Range("A5").Value = "=CONCAT(Input!C2,Input!D2,Input!K2,Input!G2,Input!H2,""    "",Input!L2,Input!M2,""  "",Input!N2,Input!O2)"
On Error Resume Next
Range("A5").AutoFill Destination:=Range("A5:A" & LastRow + 4), Type:=xlFillDefault

'Footer
If Sheets("Home").Range("A2").Value = "TMR" Or Sheets("Home").Range("A2").Value = "TMRF" Or Sheets("Home").Range("A2").Value = "TMREA" Then
Sheets("Output").Range("A" & LastRow + 5).Value = "=TEXT(Home!C2,""000000"")&TEXT(Home!B2,""00000000"")&""099""&TEXT(Home!C2,""000000"")&TEXT(Home!B2,""00000000"")&""    ""&TEXT(Input!P2,""00000000000"")&""The Mailing Room  CONTRA            TMR               """
ElseIf Sheets("Home").Range("A2").Value = "DPS" Then
Sheets("Output").Range("A" & LastRow + 5).Value = "=TEXT(Home!C2,""000000"")&TEXT(Home!B2,""00000000"")&""099""&TEXT(Home!C2,""000000"")&TEXT(Home!B2,""00000000"")&""    ""&TEXT(Input!P2,""00000000000"")&""DPS               CONTRA            TMR               """
End If
ActiveSheet.Range("A" & LastRow + 6).Value = "=""EOF1""&MID(A2,5,76)"
ActiveSheet.Range("A" & LastRow + 7).Value = "=""EOF2""&MID(A3,5,76)"
ActiveSheet.Range("A" & LastRow + 8).Value = "=""UTL1""&TEXT(Input!P2,""0000000000000"")&TEXT(Input!P2,""0000000000000"")&""0000001""&TEXT(Input!Q2,""0000000"")&""                                    """

'Export
Dim c As Range
Dim r As Range
Dim output As String
For Each r In Range("A1:A" & LastRow + 8).Rows
For Each c In r.Cells
output = output & c.Value
Next c
output = output & vbNewLine
Next r
Open ThisWorkbook.Path & "" & ([Indirect("Home!B13")]) & ".txt" For Output As #1
Print #1, output
Close
InputBox "Noice." & Chr(13) & "Your file is just in here", "File Path", "Z:My DocumentsOrrin LesiwDirect DebitConvert File"
End Sub

添加;要打印,请抑制vbNewLine。然而,output = output & vbNewLine总是会添加一个换行符,所以要么像一样添加到前面的第2行

Sub out2()
Dim c As Range
Dim r As Range
Dim output As String
For Each r In Range("A1:A" & LastRow + 8).Rows

If r.Row > 1 Then output = output & vbNewLine
For Each c In r.Cells
output = output & c.Value
Next c

Next r
Open ThisWorkbook.Path & "" & ([Indirect("Home!B13")]) & ".txt" For Output As #1
Print #1, output;

Close
End Sub

或者将范围转换为数组并使用Join

' Export
Dim ar
ar = Application.Transpose(Range("A1:A" & LastRow + 8))
Open ThisWorkbook.Path & "" & ([Indirect("Home!B13")]) & ".txt" For Output As #1

Print #1, Join(ar, vbNewLine);
Close

最新更新