Excel VBA将数据导出为CSV
我有一个包含多个工作表的Excel文件。我需要一个可以执行以下操作的宏。Excel VBA将数据导出为CSV
- 选择具有指定工作表名称的工作表。
- 从工作表中选择第一列数据长度大于1的所有行
- 将选定数据导出为指定目录中的CSV文件。
我对Excel VBA有一个非常基本的理解,并且不胜感激。
谢谢,
我会为您提供一些示例代码。由于我们不是在这里编写完整的代码,因此您的任务是深入并将代码放在一起。
1.如果要选择工作表,则需要调用Select
工作表对象的方法。有多种引用表的方式,但最常见的(IMO)是Sheets("Name of the sheet").Select
。
2a。对于选择单元格,过程是相同的,但不是单张,您必须使用单元格对象,即:Cells(r, c).Select
(同样,这不是引用单元格的唯一方法,另一个是:Range("A1").Select
),其中r
和c
分别是代表行和列的整数。一般来说,您需要拨打Select
类型的对象Range
。
摘要
到目前为止,我介绍了如何在工作簿中选择特定的对象,但它没有这样做的最佳方式。除非你需要明确选择,否则我不会这样做。代码
Sheets("SheetName").Cells(r, c).Value
这是结合前面的部分,用于访问在名为SheetName
纸r
行和列c
单元格的值,没有做出任何选择:相反,你可以在某些表中使用以下语法获取某些细胞的价值。这样你可以设置或获取值。
2b。如果你想测试一些东西,如条件,请使用If
声明。在你的情况下,它看起来像:
If Len(Sheets("SheetName").Cells(r, c).Value) > 1 Then
'do something if it's true
Else
'do something if it's false
End If
你将不得不创造一些字符串变量,像Dim content As String
,你会从通过测试细胞中添加的所有数据。毕竟,你可以将这个文本变量写入一个文件。这可能是有用的:How to create and write to a txt file using VBA
此外,还通过所有行需要循环,所以你需要循环语句,去这里了解更多详情:Loops in VBA
我希望能给你做什么了一些线索,如何做:)
这应该让你非常接近你想要的地方。
Public Sub SaveWorksheetsAsCsv()
Dim xWs As Worksheet
Dim xDir As String
Dim folder As FileDialog
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
For Each xWs In Application.ActiveWorkbook.Worksheets
xWs.SaveAs xDir & "\" & xWs.Name, xlCSV
Next
End Sub