2017-04-27 105 views
0

我发现此代码并尝试了它。它工作正常,但在保存的文本文件中,第一列有空格(对于所有行)。我无法修复此代码。请任何帮助。将Excel工作表保存为制表符分隔文本文件的VBA代码

Sub ExportRange() 
Dim ExpRng As Range 
Open ThisWorkbook.Path & "\AllDXL.txt" For Output As #1 
Set ExpRng = Worksheets("Sheet1").Range("A1").CurrentRegion 
FirstCol = ExpRng.Columns(1).Column 
LastCol = FirstCol + ExpRng.Columns.Count - 1 
FirstRow = ExpRng.Rows(1).Row 
LastRow = FirstRow + ExpRng.Rows.Count - 1 
For r = FirstRow To LastRow 
Data = "" 
For c = FirstCol To LastCol 
    ' data = ExpRng.Cells(r, c).Value 
    Data = Data & vbTab & ExpRng.Cells(r, c).Value 
Next c 
Print #1, Data 
Next r 
Close #1 
End Sub 

回答

1

对于每个单元格(包括第一个单元格),您都以vbTab作为前缀。更改以下:

Data = Data & vbTab & ExpRng.Cells(r, c).Value 

If c = FirstCol Then 
    Data = Data & ExpRng.Cells(r, c).Value 
Else 
    Data = Data & vbTab & ExpRng.Cells(r, c).Value 
End If 

另外,如果总是会有在每一行的一些数据,你可以只通过移除每一行的第一个vbTabPrint阶段

更改

Print #1, Data 

Print #1, Mid(Data, 2, Len(Data)-1) 
+0

感谢CLR,**的打印#1,MID(数据,2,LEN(数据)-1)**造成省略第一个字符第一列数据。 我将它改为** Print#1,Mid(数据,1,Len(Data)-1)**。谢谢 – Siraj

+0

你没有使用*我的答案都是*你的答案?你只需要一个或另一个。如果您使用第一个(带有“IF ELSE THEN”结构),则不需要“打印”更改。如果你同时使用'Print'部分到'Print#1,Mid(Data,1,Len(Data)-1)',你将丢失每行的最后一个字符。 – CLR

+0

太好了,谢谢CLR – Siraj

1

而且这个工程...

Sub ExportRange() 
Dim ExpRng As Range 
Dim myTab As String 
Open ThisWorkbook.Path & "\AllDXL.txt" For Output As #1 
    Set ExpRng = Worksheets("Sheet1").Range("A1").CurrentRegion 
    FirstCol = ExpRng.Columns(1).Column 
    LastCol = FirstCol + ExpRng.Columns.Count - 1 
    FirstRow = ExpRng.Rows(1).Row 
    LastRow = FirstRow + ExpRng.Rows.Count - 1 
    For r = FirstRow To LastRow 
     Data = "" 
     For c = FirstCol To LastCol 
      If c = 1 Then myTab = "" Else myTab = vbTab 
     ' data = ExpRng.Cells(r, c).Value 
      Data = Data & myTab & ExpRng.Cells(r, c).Value 
     Next c 
     Print #1, Data 
    Next r 
Close #1 
End Sub 
+0

美妙的MiguelH,它可以无缝工作。谢谢 – Siraj

相关问题