2017-08-04 761 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