Excel VBA如何发送Enter字符(Chr(10))而不产生换行?
解决VBA写入TXT文件时仅添加Chr(10)换行而不产生空行的问题
我帮你搞定这个问题!你遇到的核心问题是FileSystemObject的writeline方法默认会在内容末尾添加vbCrLf(也就是回车+换行的组合:Chr(13)+Chr(10)),但你的服务器只识别单纯的Chr(10)换行,而且这个默认的额外换行还导致了空行,让服务器无法识别后续内容。
要精准控制换行符,你只需要把writeline换成write方法,然后手动在每一行内容末尾拼接Chr(10)就行——这样既不会自动添加多余的换行,又能给服务器它需要的换行标识。
修改后的完整代码如下:
Private Sub E16_Click() Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") Dim f As Object Dim order As Variant order = Sheets("EDI").Range("I2") ' 修正原代码里变量名不一致的问题(pedido改为order) ' 打开指定路径的文本文件,2表示覆盖写入,True表示不存在则创建 Set f = fs.OpenTextFile("c:\" & IIf(Range("AA24") = 2, "temp\", "") & "pc" & order & ".txt", 2, True) ' 使用write方法写入内容,手动添加Chr(10)作为换行符 f.write "ITP" & Sheets("EDI").Range("C2") & Sheets("EDI").Range("J2") & Sheets("EDI").Range("L2") & WorksheetFunction.Rept(" ", 75) & Chr(10) f.write Sheets("EDI").Range("M2") & Chr(10) f.write "AE3" & Sheets("EDI").Range("J2") & "04771370000183" & Sheets("EDI").Range("J2") & WorksheetFunction.Rept(" ", 83) & Chr(10) ' 务必关闭文件并释放对象,避免文件锁定或内存占用 f.Close Set f = Nothing Set fs = Nothing End Sub
几个关键点:
write方法只会严格写入你指定的内容,不会自动附加任何换行符,完全由你控制每行末尾的字符。- 手动拼接
Chr(10)就是服务器要求的换行标识,不会产生多余的空行。 - 补充了文件关闭和对象释放的代码,这是VBA编程的好习惯,能避免文件被意外锁定或者内存泄漏。
如果你的最后一行不需要换行符,直接去掉最后一个Chr(10)就可以了,根据实际需求调整就行。
内容的提问来源于stack exchange,提问作者Sirius_Black
相关产品推荐
相关产品推荐

