我有一个vba宏应该(在从在线xml更新一些值之后)将一个工作表保存到CSV文件。这有效,但如果我打开CSV文件,我会看到:
CHF,Swiss Franc,1.2352,,,
CNY,Yuan Renminbi,8.1803,,,
EUR,Euro,1,,,
GBP,Pound Sterling,0.8585,,,
HKD,Hong Kong Dollar,10.3617,,,
SGD,Singapore Dollar,1.7097,,,
USD,US Dollar,1.3361,,,
,,,,,
,,,,,
所以问题是还保存了三个空colomns和两个空行。我知道在Excel中打开CSV文件后没有问题,但是在我导入它的程序中,确实如此。
我做了一些研究,发现这可能与UsedRange有关。但我找不到将usedRange设置为新值的方法,或者只保存工作表的一小部分。
我可能可以复制我想要的范围,打开一个新的工作簿,粘贴这个范围并将其保存到文件中,但这看起来有点困难。并不保证我在这个新工作簿中的UsedRange也不大。
有谁知道如何设置usedrange或者做我想要的另一种方式?我是一个绝对的VBA业余爱好者,所以如果我做了奇怪的事情,那就是原因。
我的其余代码工作正常,所以问题只出在保存文件中的额外逗号中。
我的VBA代码如下:
Sub updateCurrencies()
'
' updateCurrencies Macro
'
' Keyboard Shortcut: Ctrl+e
'
Application.DisplayAlerts = False
Dim wb As Workbook
Dim ws As Worksheet
Dim file As String
file = "\\SBS2008\RedirectedFolders\jasper\Desktop\currencies.csv"
Sheets("Sheet1").Select
ActiveWorkbook.XmlMaps("Envelope_Map").DataBinding.Refresh
Set ws = Sheets("currencies")
ws.Select
ActiveWorkbook.RefreshAll
ws.SaveAs file, FileFormat:=6
Sheets("info").Select
Set wb = Workbooks.Open(file)
wb.Save
Sheets("info").Select
Call CloseAllWorkbooks
End Sub
Public Sub CloseAllWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
If (wb.Name = "currencies") Then
wb.Close True
Else
wb.Close False ' Or True if you want changes saved
End If
Next wb
End Sub
答案 0 :(得分:0)
请参阅Daniel Cook的答案
Convert xls File to csv, but extra rows added?
Sub CorrectUsedRange()
Dim values
Dim usedRangeAddress As String
Dim r As Range
'Get UsedRange Address prior to deleting Range
usedRangeAddress = ActiveSheet.UsedRange.Address
'Store values of cells to array.
values = ActiveSheet.UsedRange
'Delete all cells in the sheet
ActiveSheet.Cells.Delete
'Restore values to their initial locations
Range(usedRangeAddress) = values
End Sub