0

(オンラインxmlからいくつかの値を更新した後)1つのシートをCSVファイルに保存する必要があるvbaマクロがあります。これは機能しますが、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,,,
,,,,,
,,,,,

したがって、問題は、3 つの空の列と 2 つの空の行も保存されることです。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

ダニエル・クックの回答はこちら

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 に答える