我正在尝试将 Excel 中的范围保存到单独的 CSV 文件。
我找到了有效的代码。我想做两处修改。
我对打开的要求我保存文件的对话框不感兴趣。
它应该保存在当前文件夹中。
还有,有没有办法让新创建的CSV文件创建后自动打开?
Option Explicit
Public Sub ExcelRowsToCSV()
Dim iPtr As Integer
Dim sFileName As String
Dim intFH As Integer
Dim aRange As Range
Dim iLastColumn As Integer
Dim oCell As Range
Dim iRec As Long
Set aRange = Range("D1:V39")
iLastColumn = aRange.Column + aRange.Columns.Count - 1
iPtr = InStrRev(ActiveWorkbook.FullName, ".")
sFileName = Left(ActiveWorkbook.FullName, iPtr - 1) & Format(Date, " mmm dd, yyyy ") & ".csv"
sFileName = Application.GetSaveAsFilename(InitialFileName:=sFileName, FileFilter:="CSV (Comma delimited) (*.csv), *.csv")
If sFileName = "False" Then Exit Sub
Close
intFH = FreeFile()
Open sFileName For Output As intFH
iRec = 0
For Each oCell In aRange
If oCell.Column = iLastColumn Then
Print #intFH, oCell.Value
iRec = iRec + 1
Else
Print #intFH, oCell.Value; ",";
End If
Next oCell
Close intFH
MsgBox "Finished: " & CStr(iRec) & " records written to " _
& sFileName & Space(10), vbOKOnly + vbInformation
End Sub
创建一个新工作簿,复制数据并保存为 CSV,而不是
open/print
csv。避免重新打开 csv 文件。
Option Explicit
Public Sub ExcelRowsToCSV()
Dim iPtr As Integer
Dim sFileName As String
Dim aRange As Range
Dim newWK As Workbook
Set aRange = ActiveWorkbook.ActiveSheet.Range("D1:V39")
iPtr = InStrRev(ActiveWorkbook.FullName, ".")
sFileName = Left(ActiveWorkbook.FullName, iPtr - 1) & Format(Date, " mmm dd, yyyy ") & ".csv"
Set newWK = Workbooks.Add
With aRange
newWK.ActiveSheet.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
newWK.SaveAs Filename:=sFileName, _
FileFormat:=xlCSVUTF8, CreateBackup:=False
MsgBox "Finished: " & CStr(aRange.Rows.Count) & " records written to " _
& sFileName & Space(10), vbOKOnly + vbInformation
End Sub
sFileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.FullName, iPtr - 1) & _
Format(Date, " mmm dd, yyyy ") & ".csv"
将保存到与 ActiveWorkbook 相同的文件夹(前提是工作簿已保存在某处)
Workbooks.Open(sFileName)
将在 Excel 中打开保存的文件。