使用 VBA 将 Excel 重命名为 CSV
Renaming Excel to CSV Using VBA
我正在尝试使用 Excel 2010 在 VBA 中编写一个宏,该宏链接到工作表中的按钮(位于单元格 A1 中)。按下按钮时,应生成删除 A 列和 B 列的 CSV,以便 C 列有效地变为 A 列。我还尝试根据工作表中单元格 A30 的单元格内容命名新生成的 CSV,但是当我 运行 宏时,我在 SaveAs 函数上遇到错误。我相信这是因为稍后在脚本中删除了单元格 A30。我的问题是哪里有一种方法可以使用范围 (A30) 命名新的 CSV,同时仍然在同一个子目录中的新 CSV 中稍后删除该单元格?我对 VBA 还是个新手,所以我不清楚为什么这是一个问题,因为我认为每个命令都是按顺序执行的,所以一旦用新名称保存 CSV,我想我' d可以删除文件名的来源
Sub rpSaveCSV()
Dim ws As Worksheet
Set ws = ActiveSheet
'Saves current sheet of tracker as a CSV
ws.SaveAs "Y:\Drive\Youth " & 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:\Drive\Tracker.xlsm"
End Sub
声明一个变量来保存字符串值:
Dim filename as String
filename = Range("A30")
'verify that "Y:\Drive\Youth " & filename & " .csv" is a valid file name:
Debug.Print "Y:\Drive\Youth " & filename & " .csv" ' looks right? Ctrl+G to find out
ws.SaveAs "Y:\Drive\Youth " & filename & " .csv", FileFormat:=xlCSV
'...delete columns...
'...do stuff...
Debug.Print filename 'value is still here!
我建议学习使用数组处理 Excel 数据。它通常比尝试在 VBA 中复制 Excel 应用程序功能简单得多。而且远不止efficient/fast.
这是一个将数据馈送到数组的函数,然后将该数组打印到 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:\Drive\Youth " & Range("A30") & " .csv"
CreateCsvFromWorkSheet 3, 60, FileName
MsgBox "Complete."
End Sub
我正在尝试使用 Excel 2010 在 VBA 中编写一个宏,该宏链接到工作表中的按钮(位于单元格 A1 中)。按下按钮时,应生成删除 A 列和 B 列的 CSV,以便 C 列有效地变为 A 列。我还尝试根据工作表中单元格 A30 的单元格内容命名新生成的 CSV,但是当我 运行 宏时,我在 SaveAs 函数上遇到错误。我相信这是因为稍后在脚本中删除了单元格 A30。我的问题是哪里有一种方法可以使用范围 (A30) 命名新的 CSV,同时仍然在同一个子目录中的新 CSV 中稍后删除该单元格?我对 VBA 还是个新手,所以我不清楚为什么这是一个问题,因为我认为每个命令都是按顺序执行的,所以一旦用新名称保存 CSV,我想我' d可以删除文件名的来源
Sub rpSaveCSV()
Dim ws As Worksheet
Set ws = ActiveSheet
'Saves current sheet of tracker as a CSV
ws.SaveAs "Y:\Drive\Youth " & 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:\Drive\Tracker.xlsm"
End Sub
声明一个变量来保存字符串值:
Dim filename as String
filename = Range("A30")
'verify that "Y:\Drive\Youth " & filename & " .csv" is a valid file name:
Debug.Print "Y:\Drive\Youth " & filename & " .csv" ' looks right? Ctrl+G to find out
ws.SaveAs "Y:\Drive\Youth " & filename & " .csv", FileFormat:=xlCSV
'...delete columns...
'...do stuff...
Debug.Print filename 'value is still here!
我建议学习使用数组处理 Excel 数据。它通常比尝试在 VBA 中复制 Excel 应用程序功能简单得多。而且远不止efficient/fast.
这是一个将数据馈送到数组的函数,然后将该数组打印到 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:\Drive\Youth " & Range("A30") & " .csv"
CreateCsvFromWorkSheet 3, 60, FileName
MsgBox "Complete."
End Sub