2009-02-16 10 views
5

Làm cách nào để mở tệp CSV được phân cách bằng dấu chấm phẩy bằng VBA trong Excel 2000?Mở tệp CSV phân cách bằng dấu chấm phẩy

dữ liệu mẫu

An ID;TEST20090222 
A Name;Firstname Surname 
A Date;11.05.2000 

Country:;SomeCountryName 
Currency;EUR 
CostA; 
CostB; 
CostC; 
Part1;10;20;30 
Part2;;;; 
Part3;34;56;87 

Trong Excel 11.8231.8221 SP3 với VBA 1025/06/05, tôi có thể mở một dấu chấm phẩy tập tin được phân định với mã VBA sau:

Workbooks.OpenText filename:=myFilename, _ 
    DataType:=xlDelimited, Semicolon:=True, Local:=True 

Tuy nhiên, khi cùng mã được chạy trong Excel 9.0.8961 SP1 với VBA 1025/06/05, tôi nhận được lỗi sau:

Compile error: Named argument not found

Đó là --Tôi think-- vì Excel 2000 không biết tên đối số "Địa phương".

Vì vậy, tôi đã xóa phần "Địa phương: = Đúng". Nhưng vấn đề sau đó là toàn bộ một dòng từ tệp CSV được ghi vào một ô thay vì được chia thành các phần phân cách bằng dấu chấm phẩy riêng biệt.

Tôi đã tìm kiếm trên Internet một giải pháp, nhưng không tìm thấy bất kỳ điều gì hữu ích và súc tích.

Bất kỳ ý tưởng nào?

[Cập nhật 2009/02/17]

Tôi cố gắng gợi ý từ user lc với macro recorder. Tuy nhiên, kết quả rất khó hiểu.

Khi tôi mở tệp CSV bằng menu Tệp-> Mở ... và sau đó chọn tệp CSV, dữ liệu được phân cách bằng dấu chấm phẩy được phân tích cú pháp chính xác. Và mã được ghi lại đơn giản như:

Workbooks.Open filename:= _ 
       "D:\testdata\Example 01 CSV\input.csv" 

Nhưng khi tôi sử dụng mã VBA đó trong macro của mình, mỗi dòng lại kết thúc trong một ô một lần nữa.

Theo đề xuất từ ​​user barrowc, tôi cũng đã thay đổi cài đặt "Tùy chọn ngôn ngữ và khu vực" của Windows từ "tiếng Đức (Thụy Sĩ)" sang "tiếng Anh (Hoa Kỳ)". Ngay cả sau khi khởi động lại Excel, không có gì thay đổi, cùng một vấn đề.

Tôi tự hỏi tại sao nó hoạt động trên user Remou của hệ thống. Bạn có cài đặt ngôn ngữ và khu vực nào?

+0

Bạn có thể đăng một vài dòng tệp CSV để chúng tôi có thể xem nó không? –

+0

Thêm thông tin của bạn vào câu hỏi, xin vui lòng, không ở đây trong các ý kiến. – isherwood

+0

@isherwood: Xong. – Lernkurve

Trả lời

3

[Cập nhật 2009/02/22]

Trong khi đó, tôi giải quyết vấn đề bằng cách viết một chức năng nhập khẩu bản thân mình thay vì sử dụng Workbooks.OpenText.

Tôi chỉ mở tệp CSV dưới dạng tệp văn bản, đọc từng dòng, chia từng dòng thành các phần tử được phân cách bằng dấu chấm phẩy và viết từng phần tử vào ô.

Sub ImportCSVFile(filepath As String) 
    Dim line As String 
    Dim arrayOfElements 
    Dim linenumber As Integer 
    Dim elementnumber As Integer 
    Dim element As Variant 

    linenumber = 0 
    elementnumber = 0 

    Open filepath For Input As #1 ' Open file for input 
     Do While Not EOF(1) ' Loop until end of file 
      linenumber = linenumber + 1 
      Line Input #1, line 
      arrayOfElements = Split(line, ";") 

      elementnumber = 0 
      For Each element In arrayOfElements 
       elementnumber = elementnumber + 1 
       Cells(linenumber, elementnumber).Value = element 
      Next 
     Loop 
    Close #1 ' Close file. 
End Sub 

Got nguồn cảm hứng từ Shasur: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html

tôi vẫn không biết tại sao Workbooks.OpenText không hoạt động trên hệ thống của tôi mặc dù nó dường như làm việc trên hệ thống user Remou 's. Tôi đoán nó có thể có một cái gì đó để làm với ngôn ngữ hệ điều hành (tiếng Anh) và các thiết lập khu vực và ngôn ngữ (Đức, Thụy Sĩ), nhưng tôi không chắc chắn.

Dù sao, giải pháp thay thế cũng phù hợp với tôi. Cảm ơn tất cả các bạn cho bạn gợi ý và giúp đỡ!

+1

Bạn đã lưu ngày của tôi. Bây giờ, macro của tôi hoạt động ở Đan Mạch và Trung Quốc. –

2

Không chắc chắn, nhưng bạn có thể thử ghi macro để thực hiện điều tương tự và kiểm tra mã VBA mà nó tạo. Bạn có thể nhận được một gợi ý có những gì còn thiếu.

2

tôi thấy rằng đây làm việc cho tôi trong Excel 2000:

Workbooks.OpenText filename:=myFilename, _ 
    DataType:=xlDelimited, Semicolon:=True 
2

Đây là OpenText phương pháp từ Excel 2000:

OpenText Method

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

Syntax

expression.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

source

và đây là phiên bản Excel 2003:

OpenText Method [Excel 2003 VBA Language Reference]

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

source

do đó Local thực sự là một tham số mới cho Excel 2003 và sẽ không hoạt động trong Excel 2000

Không có ý tưởng về nguyên nhân của hành vi sai trái. Tham số Local được định nghĩa là:

Local Optional Variant. Specify True if regional settings of the machine should be used for separators, numbers and data formatting.

Bạn có thể muốn kiểm tra lại các thiết lập khu vực trên máy tính Excel 2000 và kiểm tra để xem nếu có bất cứ điều gì mà có thể gây ra các dữ liệu được giải thích sai. Ngoài ra, hãy thử chỉ định rõ các thông số DecimalSeparatorThousandsSeparator vào phương pháp Excel 2000 và xem giúp

2

Một giải pháp khác - chỉ cần đổi tên tệp .csv thành tệp .txt và sử dụng phương thức OpenText.

1

tôi thích:

Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True 
0

thường dấu phẩy được đánh dấu cho đúng như thiết bị tách, nơi nó thường là dấu phân cách thập phân. Thêm DecimalSeparator: = "," và chú của Bob là chú của bạn

0

Re Any ideas?

Nếu bạn muốn sửa chữa một tập tin cho người khác sử dụng excel thêm này trên dòng đầu tiên của tập tin mà không có dấu ngoặc kép theo sau là một linebreak: "Tháng Chín =;”

Một cách dễ dàng để tự mở file ngu ngốc là để đổi tên phần mở rộng thành .txt hoặc .htm sau đó sử dụng excel File - Open.

Từ VBA Tôi khuyên bạn nên tìm kiếm phương pháp trong MSDN và chỉ định từng thông số theo cách thủ công, kinh nghiệm của tôi là điều này đã loại bỏ hầu hết các vấn đề khu vực.