不对话框保存然后打开新创建的文件

问题描述 投票:0回答:2

我正在尝试将 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
excel vba csv
2个回答
0
投票

创建一个新工作簿,复制数据并保存为 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

0
投票
sFileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.FullName, iPtr - 1) & _
            Format(Date, " mmm dd, yyyy ") & ".csv"

将保存到与 ActiveWorkbook 相同的文件夹(前提是工作簿已保存在某处)

Workbooks.Open(sFileName)
将在 Excel 中打开保存的文件。

© www.soinside.com 2019 - 2024. All rights reserved.