0

我有一个 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
4

1 回答 1

0

请参阅 Daniel Cook 的答案

将 xls 文件转换为 csv,但添加了额外的行?

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
于 2013-08-26T17:50:44.540 回答