更正Excelmacros以将复制的Excel文件另存为TXT或CSV

所以我有这个自制的 Excelmacros模板。

在这里输入图像说明

我在xlsm文件中插入的macros代码的任务是将副本保存在具有不同格式的相同文件夹中。 该格式是.txt(见下图)

在这里输入图像说明

macros的预期结果(保存之后)应该与excel文件(视觉上)相同,但是这次是.txt格式。

不幸的是,那并没有发生。 它生成一个不同的txt文件,它包含不可读的字母数字字符,这里是生成的txt文件的一个例子。

¬TËNÃ0 ¼#ñ '¯(vဠjÚ # °µ· ©c[^SÚ¿g“– P ö '±wfvìq 8o\1ÃD6øJœËž(Ðë`¬ŸTâõå¾¼ eð \ðX‰ ' NOú/‹ˆTpµ§JÔ9Çk¥H×Ø É ÑóÌ8¤ 2 ¦‰Š §0AuÑë]* |FŸËÜbˆAÿ Çðîrq7çßK%#ëEq³\×RU btVCf¡jæ l¨ã±Õ(g#xJá uj#XBG{Ð~J.Wr%WvŒTÛHgÜÓ †vf»ÜUÝ#ûœ¬Áâ R~€†›Rs§>BšŽB˜ÊÝ «žq®ÑIª ³l@§pçaä ý ë¿ î`ê*IuÃù ( ³´Ü ýÞð JŠ Át` “m'Ýû ™ ªîy¸„ f !å…C:r·KÐ}Ì5$4Ï9q Ž.à;ö. ¼] H ¼„ÿwá+mu S¶¸ŽÃ¦Ã¶fäÔ l;¶×‚A³ [u×Ðà ÿÿ PK ! µU0#ô L _rels/.rels ¢ ( 

这是我的macros代码:

 Sub SaveMe() Dim FName As Range Dim firstDate As String Dim firstTime As String Dim answer As Integer firstDate = Format(Date, "mmddyyyy") firstTime = Format(Now, "hhmmssAM/PM") Set FName = Range("H5") ActiveWorkbook.SaveCopyAs FileName:=ActiveWorkbook.Path & "\" & "QB JE " & FName & " " & firstDate & " " & firstTime & ".txt", FileFormat:=xlText, CreateBackup:=False End Sub 

我想知道是否有人可以看看我的代码,并帮助指出什么是错的。

它看起来像你想另存为不是SaveCopyAs。

Fileformat xlText或xlTextMSDOS

你可以两步走这个过程。 保存副本,然后将其打开,并将其另存为文本文件。

 ActiveWorkbook.SaveCopyAs FileName:=ActiveWorkbook.Path & "\" & "QB JE " & FName & " " & firstDate & " " & firstTime & ".xlsx" Workbooks.Open (ActiveWorkbook.Path & "\" & "QB JE " & FName & " " & firstDate & " " & firstTime & ".xlsx") ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.Path & "\" & "QB JE " & FName & " " & firstDate & " " & firstTime & ".txt", FileFormat:=xlText, CreateBackup:=False 

https://msdn.microsoft.com/en-us/library/office/ff841185.aspx

https://msdn.microsoft.com/en-us/library/office/ff198017.aspx

从我的post看这里。 Excel VBA导出为带有固定列宽的文本文件+指定的仅行和列+移调

循环所有行和所有单元格。 发送每个值到一个padpace函数。 用单元格值填充空格后,为每个单元格值构buildstring。

您将不得不添加对工作簿的引用。 在VBA IDE中,进入工具下拉菜单并select引用。 然后向下滚动并select“Microsoft脚本运行时”。 然后点击确定。

将填充空间函数调用参数调整为适合电子表格中的数据的数字。 所以你会用padpace调用来改变20行。 PadSpace(20,len(cellValue))

这将做所有的行和列。

 Public Sub MyMacro() Dim lRow As Long Dim lCol As Long Dim strRow As String Dim ws As Excel.Worksheet Dim ts As TextStream Dim fs As FileSystemObject 'Create the text file to write to Set fs = New FileSystemObject Set ts = fs.CreateTextFile("C:\Temp\test.txt", True, False) Set ws = Application.ActiveSheet 'Loop through all the rows. lRow = 1 Do While lRow <= ws.UsedRange.Rows.count 'Clear the string we are building strRow = "" 'Loop through all the columns for the current row. lCol = 1 Do While lCol <= ws.UsedRange.Columns.count 'Build a string to write out. strRow = strRow & ws.Cells(lRow, lCol) & PadSpace(20, Len(ws.Cells(lRow, lCol))) lCol = lCol + 1 Loop 'Write the line to the text file ts.WriteLine strRow lRow = lRow + 1 ws.Range("A" & lRow).Activate Loop ts.Close: Set ts = Nothing Set fs = Nothing End Sub 'This function will take the max number of spaces you want and the length of the string in the cell and return you the string of spaces to pad. Public Function PadSpace(nMaxSpace As Integer, nNumSpace As Integer) As String If nMaxSpace < nNumSpace Then PadSpace = "" Else PadSpace = Space(nMaxSpace - nNumSpace) End If End Function