使用VBA为多个单元格创建CSV

时间:2013-08-26 15:24:58

标签: excel vba save

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

1 个答案:

答案 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