2011-12-08 38 views
5

Tôi cần lập trình chương trình thông qua tập lệnh VBA/VBS xuất tất cả trang tính (tổng cộng 4 và tôi biết tên) thành trang tính có tên csv tệp trong cùng thư mục, mà không tải excel và chạy macro theo cách thủ công.Xuất mỗi trang tính thành tệp csv riêng lẻ

Lý tưởng nhất là tập lệnh sẽ lấy trong tệp filepath/filename.xls và tệp xuất tệp dưới dạng đối số dòng lệnh.

Tôi đã đọc nhiều tập lệnh VBA Excel để làm việc đó trong Excel và tôi đã thấy một số để tải sổ làm việc excel để xuất trang tính đầu tiên. Tuy nhiên khi tôi cố gắng để pha trộn hai tôi nhận được lỗi này:

(1,12) Expected End of Statement

Dim source As Workbook 
Set source = Application.Workbooks.Open(WScript.Arguments.Item(0), ReadOnly:=True) 
For Each sheet In source.Sheets 
.SaveAs Filename:= WScript.Arguments.Item(1) & Source.Sheets.Name, FileFormat:=xlCSV 
Next sheet 
wb.Close 
+4

Chào mừng bạn đến StackOverflow! Vui lòng đăng mã của bạn để những người khác có thể giúp gỡ lỗi mã. Nỗ lực hiển thị luôn được đánh giá cao (và được mong đợi). – Excellll

+0

Xin lỗi, tôi cảm thấy có lẽ tôi đã thoát khỏi mã mà tôi đang cố gắng thực hiện nên không muốn gửi.Như tôi đã nói tôi có một vba tương tự làm việc mà không nhận được tờ đầu tiên, mã này là một sự pha trộn đơn giản với một số khác trong kịch bản bảng tính. –

Trả lời

10

A để chạy mã này sẽ trông giống như thế này.

  1. Các tập tin vbs thể được thực hiện từ dòng lệnh
  2. Tên thư mục là không cần thiết như nếu tập tin tồn tại (các bài kiểm tra đối tượng FSO cho việc này) sau đó vào thư mục nó nằm trong phải còn tồn tại
  3. Mã tự động hóa Excel để tách các tấm

hai điểm chính cần lưu ý so với VBA của bạn trên

  • bạn có thể' t Làm mờ đối tượng vbs dưới dạng chuỗi, Sổ làm việc, v.v. (do đó lỗi ban đầu của bạn). Bạn chỉ có thể Dim họ
  • bạn không thể sử dụng một tên liên tục như xlCSV trong VBScript, do đó việc sử dụng 6 dưới đây như là định dạng CSV

    Dim strFilename 
    Dim objFSO 
    Set objFSO = CreateObject("scripting.filesystemobject") 
    strFilename = "C:\temp\test.xlsx" 
    If objFSO.fileexists(strFilename) Then 
        Call Writefile(strFilename) 
    Else 
        wscript.echo "no such file!" 
    End If 
    Set objFSO = Nothing 
    
    Sub Writefile(ByVal strFilename) 
    Dim objExcel 
    Dim objWB 
    Dim objws 
    
    Set objExcel = CreateObject("Excel.Application") 
    Set objWB = objExcel.Workbooks.Open(strFilename) 
    
    For Each objws In objWB.Sheets 
        objws.Copy 
        objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6 
        objExcel.ActiveWorkbook.Close False 
    Next 
    
    objWB.Close False 
    objExcel.Quit 
    Set objExcel = Nothing 
    End Sub 
    
+1

Đó chỉ là những gì tôi cần, cảm ơn rất nhiều, một lời giải thích rất tốt và cảm ơn bạn đã cho tôi biết nơi tôi đã đi sai. Tôi đã học được điều gì đó ở đây. –

-1

Để giúp bạn bắt đầu:

Cho một bảng tính Excel có chứa một Demo tờ như

------------------------------- 
SELECT * FROM Demo 
------------------------------- 
|F1|F2 |F3  |F4  | 
| 1|1.1|12/10/2011|text elm 1| 
| 2|2.2|12/11/2011|text elm 2| 
| 3|4.4|12/12/2011|text elm 3| 
------------------------------- 

và một ADODB.Connection với một ConnectionString như:

Provider=MSDASQL.1;Extended Properties="DBQ=<FullPathToYourXls>;Driver={Microsoft 
Excel Driver (*.xls)}; 

tất cả các bạn cần phải .Execute là một tuyên bố SELECT INTO như

SELECT * INTO [Demo.csv] IN '<PathToYourCsvFolder>' 'Text;' FROM Demo 

để có được:

type ..\data\ExcelCsv2\Demo.csv 
"F1";"F2";"F3";"F4" 
1;1,10;10.12.2011 00:00:00;"text elm 1" 
2;2,20;11.12.2011 00:00:00;"text elm 2" 
3;4,40;12.12.2011 00:00:00;"text elm 3" 

(Đức locale)

Các SELECT INTO tuyên bố sẽ tạo ra các phần thích hợp

[Demo.csv] 
ColNameHeader=True 
CharacterSet=1252 
Format=Delimited(;) 
Col1=F1 Integer 
Col2=F2 Float 
Col3=F3 Date 
Col4=F4 Char Width 50 

trong tệp schema.ini một cách tự động.

+0

Rất cám ơn Ekkehard tuy nhiên tôi không sử dụng ngôn ngữ thông thường nhất mà tôi có thể đạt được từ môi trường của mình là gọi một tập lệnh vbs trong khi truyền các tham số cần thiết. Tuy nhiên nếu chuỗi kết nối có thể được chạy trong VBA thì tôi có thể chuyển đổi xung quanh tệp xls mà tôi có thể duy trì kết nối. –

+0

Ngoài ra tôi không thấy làm thế nào ví dụ của bạn làm việc với nhiều tờ trong một bảng tính, tôi có thiếu cái gì? –

Các vấn đề liên quan