2017-08-04 170 views
-2

我有一个包含多个工作表的Excel文件。我需要一个可以执行以下操作的宏。Excel VBA将数据导出为CSV

  1. 选择具有指定工作表名称的工作表。
  2. 从工作表中选择第一列数据长度大于1的所有行
  3. 将选定数据导出为指定目录中的CSV文件。

我对Excel VBA有一个非常基本的理解,并且不胜感激。

谢谢,

回答

0

我会为您提供一些示例代码。由于我们不是在这里编写完整的代码,因此您的任务是深入并将代码放在一起。

1.如果要选择工作表,则需要调用Select工作表对象的方法。有多种引用表的方式,但最常见的(IMO)是Sheets("Name of the sheet").Select

2a。对于选择单元格,过程是相同的,但不是单张,您必须使用单元格对象,即:Cells(r, c).Select(同样,这不是引用单元格的唯一方法,另一个是:Range("A1").Select),其中rc分别是代表行和列的整数。一般来说,您需要拨打Select类型的对象Range

摘要

到目前为止,我介绍了如何在工作簿中选择特定的对象,但它没有这样做的最佳方式。除非你需要明确选择,否则我不会这样做。代码

Sheets("SheetName").Cells(r, c).Value 

这是结合前面的部分,用于访问在名为SheetNamer行和列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

我希望能给你做什么了一些线索,如何做:)

0

这应该让你非常接近你想要的地方。

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