2011-12-07 56 views
10

Tôi cần xuất một số kết quả dưới dạng tệp .csv, sau đó được phân tích cú pháp bởi một quy trình khác. Để tạo ra các kết quả này, tôi có một sổ làm việc lớn chứa tất cả các macro và hàm mà tôi cần.Cách tạo tệp CSV riêng từ VBA?

  1. Có thể "tạo" tệp riêng biệt .csv từ VBA không?
  2. Có thể sử dụng các tính năng VBA để viết vào thay vì chỉ viết theo cách tiếp cận "nguyên bản" không?

Cảm ơn bạn :)

+1

Nếu không có thêm chi tiết thì sẽ rất khó để hỗ trợ bạn. Nguồn dữ liệu là gì và tại sao bạn cần tạo CSV từ đầu thay vì sử dụng phương thức gốc của Excel (SaveAs)? – JimmyPena

Trả lời

22

là một cái gì đó như thế này những gì bạn muốn?

Option Explicit 
Sub WriteFile() 

    Dim ColNum As Integer 
    Dim Line As String 
    Dim LineValues() As Variant 
    Dim OutputFileNum As Integer 
    Dim PathName As String 
    Dim RowNum As Integer 
    Dim SheetValues() As Variant 

    PathName = Application.ActiveWorkbook.Path 
    OutputFileNum = FreeFile 

    Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum 

    Print #OutputFileNum, "Field1" & "," & "Field2" 

    SheetValues = Sheets("Sheet1").Range("A1:H9").Value 
    ReDim LineValues(1 To 8) 

    For RowNum = 1 To 9 
    For ColNum = 1 To 8 
     LineValues(ColNum) = SheetValues(RowNum, ColNum) 
    Next 
    Line = Join(LineValues, ",") 
    Print #OutputFileNum, Line 
    Next 

    Close OutputFileNum 

End Sub 

Đừng quên bạn sẽ cần đặt dấu ngoặc kép xung quanh bất kỳ trường nào chứa dấu phẩy.

+0

Không biết tại sao, nhưng nếu tôi sửa đổi nhận xét bất kỳ mã nào và chạy nó, các SheetValues ​​sẽ được hợp nhất thành một hoặc hai cột và hoàn nguyên mã cho một trong bài đăng này không khắc phục được sự cố. Chỉ cần dành cả ngày để thử nghiệm công cụ này và không thể tìm ra lý do. – Alfabravo

+0

@ Alfabravo. Nếu bạn vào hồ sơ của tôi, bạn sẽ tìm thấy một địa chỉ email. Nếu bạn gửi cho tôi một bản sao của mã lỗi của bạn, tôi sẽ có một cái nhìn. –

+0

@tonyDallimore, "Khóa ghi là #OutputFileNum" làm gì? –

1

Bạn có thể viết một macro muốn lưu bảng tính hiện hành (mở file excel) trong CSV từ VBA:

ActiveWorkbook.SaveAs Filename:="C:\Book1.csv", _ 
    FileFormat:=xlCSVMSDOS, CreateBackup:=False 
+0

Được rồi, đó sẽ là một sự khởi đầu. Nhưng bất kỳ ý tưởng làm thế nào tôi có thể làm một bên ngoài hoàn toàn? – Jerome

7

Câu trả lời của Tony thường hoạt động nhưng không xử lý trường hợp văn bản của bạn chứa dấu phẩy hoặc dấu ngoặc kép. Bạn có thể thích sử dụng phương pháp Workbook.SaveAs.

Dưới đây là ví dụ nếu bạn muốn lưu nội dung của Sheet1 dưới dạng tệp csv riêng biệt.

Sub create_csv() 
    Dim FileName As String 
    Dim PathName As String 
    Dim ws As Worksheet 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 
    FileName = "filename.csv" 
    PathName = Application.ActiveWorkbook.Path 
    ws.Copy 
    ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
End Sub 

Hãy tưởng tượng rằng Sheet1 của bạn có chứa:

lorem ipsum

truyền thuyết, m IPS "um"

Sản lượng tập tin csv sẽ là:

lorem, ipsum

"truyền thuyết, m", "ip" "um" ""

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