Ira nhận được một tệp được phân tách bằng văn bản hàng tuần mà anh ấy nhập vào Excel bằng cách sử dụng macro. Tên tệp luôn giống nhau mỗi tuần, vì vậy Ira có thể nhúng nó vào macro; điều này làm cho việc nhập rất dễ dàng. Gần đây, hệ thống mới của nhà cung cấp bắt đầu thay đổi tên tệp mỗi tuần, nhưng 12 ký tự đầu tiên luôn được giữ nguyên. Ira tự hỏi làm thế nào anh ta có thể viết mã macro để nhập tệp văn bản này mà không cần sửa đổi tên tệp mỗi tuần.

Có một số cách bạn có thể tiếp cận vấn đề này và tất cả chúng có thể có nghĩa là một số mã hóa mở rộng macro của bạn. Phương pháp bạn chọn nên tùy thuộc vào cách bạn muốn thực hiện công việc của mình mỗi tuần. Ví dụ, giả sử rằng bạn biết thư mục mà tệp đến được lưu trữ, 12 ký tự cơ bản là gì cho tên tệp và phần mở rộng tên tệp. Với thông tin đó, bạn có thể chỉ cần nhắc người dùng cung cấp hậu tố cho tên tệp, theo cách này:

Sub OpenImportFile()

Dim sFileName As String     Dim sBase As String     Dim sSuffix As String     Dim sExt As String

sBase = "c:\MyDirectory\First12Chars"

sExt = ".csv"

sSuffix = InputBox("Enter suffix for filename")



sFileName = sBase & sSuffix & sExt     Workbooks.Open Filename:=sFileName End Sub

Rõ ràng là bạn có thể thay đổi phần cơ sở và phần mở rộng theo ý muốn. Ví dụ này giả định rằng bạn đang nhập tệp CSV, tệp này sẽ mở trong Excel tốt.

Nếu bạn chỉ đơn giản là đặt một nhóm tệp vào một thư mục và bạn muốn mở tất cả chúng, thì mã sẽ chạy nhanh hơn một chút vì bạn không cần nhận thông tin đầu vào của người dùng.

Sub OpenImportFiles()

Dim sFileName As String     Dim sBase As String     Dim sExt As String

sBase = "c:\MyDirectory\First12Chars"

sExt = ".csv"



sFileName = Dir(sBase & "*" & sExt)

If sFileName = "" Then         MsgBox "No Files Found"

Else         Do While sFileName > ""

Workbooks.Open Filename:=sFileName             sFileName = Dir         Loop     End If End Sub

Cách tiếp cận này mở tất cả các tệp CSV trong thư mục; để mở một loại tệp khác, chỉ cần thay đổi những gì được lưu trữ trong biến sExt. Một điều cần nhớ là vì tất cả các tệp CSV trong thư mục đều được mở, điều đó có nghĩa là nó có thể mở các tệp nhập từ các tuần trước. (Đây có thể là điều bạn muốn.)

Mọi thứ được trình bày trong mẹo này cho đến nay đều giả định rằng khi bạn “nhập” một tệp, tất cả những gì bạn muốn làm là mở tệp để bạn có thể làm việc với nó. Đó có thể không phải là trường hợp; bạn có thể muốn macro của mình xử lý tệp nhập theo một cách nào đó và làm gì đó với nó. Chức năng đó có thể đã có trong macro cũ hơn của bạn, vì vậy tất cả những gì bạn cần làm là thay đổi cách nhận dạng tệp nhập. Nếu đúng như vậy, mã bạn sử dụng có thể được điều chỉnh từ mã đã được trình bày trong mẹo này.

Một cách khác để lấy dữ liệu ra khỏi tệp văn bản và nhét nó vào sổ làm việc là sử dụng phương thức OpenText, như được hiển thị trong mã ví dụ này.:

Sub OpenImportFile()

Dim sFileName As String     Dim sBase As String     Dim sExt As String

sBase = "c:\MyDirectory\First12Chars"

sExt = ".csv"

sFileName = sBase & "*" & ".txt"



Workbooks.OpenText Filename:=sFileName, Origin:= _       xlMSDOS, StartRow:=1, DataType:=xlDelimited, _       TextQualifier:=xlDoubleQuote, _       ConsecutiveDelimiter:=False, Tab:=True, _       Semicolon:=False, Comma:= False, Space:=False, _       Other:=False, FieldInfo:=Array(1, 1), _       TrailingMinusNumbers:=True End Sub

Việc khám phá đầy đủ những gì phương pháp OpenText thực hiện nằm ngoài phạm vi của mẹo này, nhưng kết quả là tất cả các tệp văn bản được phân tách bắt đầu bằng 12 ký tự cơ bản sẽ được mở trong sổ làm việc của bạn.

Bạn có thể sửa đổi cách hoạt động của phương thức bằng cách thay đổi các tham số. Bạn sẽ muốn đặc biệt chú ý đến các tham số được sử dụng để chỉ định ký tự phân tách nào nên được sử dụng.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (13472) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.