使用 VBA 将 Excel 重命名为 CSV



我正在尝试使用 Excel 2010 在 VBA 中编写一个宏,该宏链接到工作表(位于单元格 A1 中(中的按钮。按下按钮时,应生成删除列 A 和列 B 的 CSV,以便列 C 有效地成为列 A。我还尝试根据工作表中单元格 A30 中的单元格内容命名新生成的 CSV,但是当我运行宏时,我在 SaveAs 函数上出现错误。我相信这是因为单元格 A30 稍后会在脚本中删除。我的问题是,哪里有办法使用范围 (A30( 来命名新的 CSV,同时稍后在新 CSV 中仍然删除该单元格,所有这些都在同一子中?我仍然是 VBA 的新手,所以当我认为每个命令都是按顺序执行时,我不清楚为什么这是一个问题,所以一旦 CSV 使用新名称保存,我认为我可以删除文件名的来源。

Sub rpSaveCSV()
Dim ws As Worksheet
Set ws = ActiveSheet
'Saves current sheet of tracker as a CSV
ws.SaveAs "Y:DriveYouth " & Range("A30") & " .csv", FileFormat:=xlCSV
'Copies entire sheet and pastes values to get rid of formulas
  ws.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    ActiveSheet.Select
    Application.CutCopyMode = False
'Deletes first two columns and all remaining columns without content
Range("A:B").EntireColumn.Delete
Range("BI:XFD").EntireColumn.Delete
'Saves panel CSV
ActiveWorkbook.Save
'Opens Tracker up again
Workbooks.Open Filename:="Y:DriveTracker.xlsm"
End Sub

声明一个变量来保存字符串值:

Dim filename as String
filename = Range("A30")
'verify that "Y:DriveYouth " & filename & " .csv" is a valid file name:
Debug.Print "Y:DriveYouth " & filename & " .csv" ' looks right? Ctrl+G to find out
ws.SaveAs "Y:DriveYouth " & filename & " .csv", FileFormat:=xlCSV
'...delete columns...
'...do stuff...
Debug.Print filename 'value is still here!

我建议学习将数组与Excel数据一起使用。 它通常比尝试在 VBA 中复制 Excel 应用程序函数要简单得多。而且它的效率/速度要快得多。

这是一个将数据馈送到数组,然后将数组打印到 csv(文本(文件的函数。

Sub CreateCsvFromWorkSheet(leftColumn, rightColumn, FileName)
    Set ws = ActiveSheet
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateTextFile(FileName, True)
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    ar = ws.Range(ws.Cells(1, leftColumn), ws.Cells(lastRow, rightColumn))
    For i = 1 To UBound(ar, 1)
        strLine = ""
        For j = 1 To UBound(ar, 2)
            strLine = strLine & ar(i, j) & ","
        Next
        strLine = Left(strLine, Len(strLine) - 1)
        f.WriteLine strLine
    Next
    f.Close
End Sub

你可以像这样调用函数:

Sub TestRun()
    FileName = "Y:DriveYouth " & Range("A30") & " .csv"
    CreateCsvFromWorkSheet 3, 60, FileName
    MsgBox "Complete."
End Sub

最新更新