2016-04-28 70 views
-1

我是VBA的新手。我需要從不同位置打開現有文件,並將每個工作表保存在工作表名稱(選項卡名稱)的不同csv文件中。我嘗試過這樣的事情。VBA宏打開Excel文件並將工作表保存到單獨的CSV文件中

Sub SplitFile() 
Dim vPath As String 
vPath = Application.ActiveWorkbook.Path 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
For Each xWs In ThisWorkbook.Sheets 
    xWs.Copy 
    Application.ActiveWorkbook.SaveAs Filename:=vPath & "\" & xWs.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False 
    Application.ActiveWorkbook.Close False 
Next 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub 

這適用於當前活動工作表,但我想處理其他路徑中的另一個工作表。

我試圖分配一個變量來保存文件路徑,但它拋出一個錯誤。

請幫幫我。提前致謝。

+0

你是什麼意思的另一個工作表在其他路徑。你的意思是你有更多的工作簿,你想運行的代碼?這是非常不清楚的。 –

+0

@MacroMan,對不起,如果不清楚。以上代碼適用於已打開的工作簿。我想在運行此宏時在特定路徑中打開工作簿。 – arunpandiyarajhen

回答

1

你需要創建一個工作簿變量和一個工作簿對象分配給它:

Sub SplitFile() 

Dim vPath As String 
Dim wb As Workbook 
Dim wbPath As Variant 

wbPath = Application.GetOpenFileName("Excel Files (*.xls*), *.xls*") 

If wbPath = False Then Exit Sub 

Set wb = Workbooks.Open(wbPath) 

vPath = wb.Path 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
For Each xWs In wb.Sheets 
    xWs.Copy 
    Application.ActiveWorkbook.SaveAs Filename:=vPath & "\" & xWs.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False 
    Application.ActiveWorkbook.Close False 
Next 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub 

正如你所看到的,一旦你分配工作簿你剛纔指的是在你的代碼需要的地方。

+0

感謝您的信息。當我運行代碼時,它會拋出一個錯誤,指出它是運行時錯誤438.對象不支持此屬性。任何理由嗎? – arunpandiyarajhen

+0

有一個錯字 - 請參閱更新的代碼 –

相關問題