我有一个 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,,,
,,,,,
,,,,,
所以问题是三个空列和两个空行也被保存了。我知道在 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