Excel VBA操作:单元格中丢失TAB停止,如何防止这种情况?

问题描述 投票:0回答:1

我正在使用一个简单的 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++ 中执行简单的搜索和替换找到了一种方法,但是自动化脚本解决方案将是更好的选择。

谢谢!

excel vba batch-file cmd tabstop
1个回答
0
投票

如果我是对的,您的系统只能处理以制表符分隔的文本文件。那么你就不必将其转换为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

© www.soinside.com 2019 - 2024. All rights reserved.