我正在使用一个简单的 VBA 脚本将一个单元格值 (E1) 复制到文件列表中的另一个单元格值 (Q1):
文本编辑器中显示的原始文件: Excel 中显示的原始文件:
Sub header_austauschen()
ChDir (ActiveWorkbook.Sheets("Tabelle1").Range("D8"))
Nextfile = Dir("*.XLS")
While Nextfile <> ""
Workbooks.Open (Nextfile)
Workbooks(Nextfile).Sheets(1).Range("Q1") = Workbooks(Nextfile).Sheets(1).Range("E1")
Workbooks(Nextfile).Save
Workbooks(Nextfile).Close
Nextfile = Dir()
Wend
End Sub
问题是,操作后,文件所有行中“CR”之前的制表位都丢失了,因此我们的软件工具无法再处理生成的文本文件:
如何保留制表位?还是事后添加回去?我尝试将
& vbTab
添加到正在复制的脚本中,但它不起作用(而且它只会影响第一行)。
它不必在 VBA 中发生,但应该使用某种脚本(例如 Windows Batch/CMD)来完成。 我通过在 Notepad++ 中执行简单的搜索和替换找到了一种方法,但是自动化脚本解决方案将是更好的选择。
谢谢!
如果我是对的,您的系统只能处理以制表符分隔的文本文件。那么你就不必将其转换为xls。无需转换即可轻松完成。
Sub ProcessFile()
Dim file As String, newFile As String
Dim lines() As String, words() As String
Dim i As Integer
file = "d:\temp\data1.txt"
newFile = "d:\temp\new.txt"
Open file For Input As #1
Open newFile For Output As #2
Do While Not EOF(1)
Line Input #1, textline
lines = Split(textline, vbNewLine)
For i = 0 To UBound(lines)
If i = 0 Then
words = Split(lines(i), vbTab)
words(16) = words(4)
Print #2, Join(words, vbTab)
Else
Print #2, lines(i)
End If
Next i
Loop
Close #1
Close #2
End Sub