2016-04-28 14 views
-1

Ich bin neu in VBA. Ich habe eine Anforderung, vorhandene Datei von einem anderen Speicherort zu öffnen und jedes Arbeitsblatt in verschiedenen CSV-Dateien in dem Name des Arbeitsblattnamens (Registerkartenname) zu speichern. Ich habe so etwas probiert.VBA-Makro zum Öffnen einer Excel-Datei und Speichern der Arbeitsblätter in separaten CSV-Dateien

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 

Dies funktioniert für das derzeit aktive Arbeitsblatt, aber ich möchte ein anderes Arbeitsblatt in einem anderen Pfad verarbeiten.

Ich habe versucht, eine Variable zuzuweisen, die den Dateipfad enthält, aber es wirft einen Fehler.

Bitte helfen Sie mir. Danke im Voraus.

+0

was meinst du mit 'ein anderes Arbeitsblatt in einem anderen Pfad'? Meinst du, du hast mehr Arbeitsmappen, auf denen du den Code ausführen willst? Dies ist sehr unklar. –

+0

@MacroMan, Sorry wenn es unklar ist. Der obige Code funktioniert für die Arbeitsmappe, die geöffnet ist. Ich möchte eine Arbeitsmappe in einem bestimmten Pfad öffnen, wenn dieses Makro ausgeführt wird. – arunpandiyarajhen

Antwort

1

Sie benötigen eine Arbeitsmappe Variable zu erstellen und eine Arbeitsmappe Objekt zuweisen:

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 

Wie Sie sehen können, wenn Sie Ihre Arbeitsmappe zugewiesen haben Sie nur zu, dass verweisen in Ihrem Code, wo immer nötig.

+0

Danke für die Information. Wenn ich den Code ausführte, wird ein Fehler ausgegeben, der besagt, dass es sich um den Laufzeitfehler 438 handelt. Object unterstützt diese Eigenschaft nicht. Irgendein Grund dafür? – arunpandiyarajhen

+0

Es gab einen Tippfehler - siehe aktualisierten Code –

Verwandte Themen