Cách sử dụng Phương thức GetOpenFilename trong VBA Excel 2016

0
3131

Nếu quy trình VBA của bạn cần hỏi người dùng tên tệp, bạn có thể sử dụng hàm InputBox và để người dùng Excel thực hiện một số thao tác gõ. Tuy nhiên, một hộp đầu vào thường không phải là công cụ tốt nhất cho công việc này, bởi vì hầu hết người dùng cảm thấy khó nhớ đường dẫn, dấu gạch chéo ngược, tên tệp và phần mở rộng tệp. Nói cách khác, quá dễ để vặn vít khi gõ tên tệp.

Để có giải pháp tốt hơn cho vấn đề này, hãy sử dụng phương thức GetOpenFilename của đối tượng Ứng dụng, để đảm bảo rằng mã của bạn có được tên tệp hợp lệ, bao gồm cả đường dẫn hoàn chỉnh. Phương thức GetOpenFilename hiển thị hộp thoại Mở quen thuộc (một tiếng chuông chết cho hộp thoại Excel sẽ hiển thị khi bạn chọn Tệp → Mở → Duyệt).

Cú pháp cho phương thức GetOpenFilename

Cú pháp chính thức của phương thức GetOpenFilename như sau:

object.GetOpenFilename ([fileFilter], [filter Index],
  

[tiêu đề]

, [buttonText], [multiSelect])

Phương thức GetOpenFilename lấy các đối số tùy chọn bên dưới.

Tranh luậnNhững gì nó làm
Bộ lọc tệpXác định các loại tệp xuất hiện trong hộp thoại
(ví dụ: * .TXT). Bạn có thể chỉ định một số bộ lọc cho người dùng
lựa chọn.
Bộ lọc IndexXác định bộ lọc nào của hộp thoại mà hộp thoại hiển thị theo
mặc định.
Tiêu đềChỉ định chú thích cho
thanh tiêu đề của hộp thoại .
Nút văn bảnBỏ qua (chỉ được sử dụng cho phiên bản Macintosh của Excel).
Đa lựa chọnNếu đúng, người dùng có thể chọn nhiều tệp.

Một ví dụ về GetOpenFilename

Đối số fileFilter xác định những gì xuất hiện trong danh sách thả xuống Files of Type của hộp thoại. Đối số này bao gồm các cặp chuỗi bộ lọc tệp theo sau là đặc tả bộ lọc tệp ký tự đại diện, với dấu phẩy ngăn cách từng phần và cặp. Nếu được bỏ qua, đối số này mặc định như sau:

All Files (*.*), *.* 

Lưu ý rằng chuỗi này bao gồm hai phần, được phân tách bằng dấu phẩy:

All Files (*.*) 

And

*. *

Phần đầu tiên của chuỗi này là văn bản được hiển thị trong danh sách thả xuống Loại tệp. Phần thứ hai xác định tập tin nào mà hộp thoại hiển thị. Ví dụ: *. * Có nghĩa là tất cả các tệp.

Mã trong ví dụ sau sẽ mở hộp thoại hỏi người dùng tên tệp. Quy trình xác định năm bộ lọc tệp. Lưu ý rằng chuỗi tiếp tục dòng VBA được sử dụng để thiết lập biến Bộ lọc; làm như vậy giúp đơn giản hóa đối số khá phức tạp này.

 
Sub GetImportFileName ()
Dim Finfo As String
Dim FilterIndex As Long
Dim Title As String
Dim FileName As Variant
‘ Set up list of file filters
FInfo = “Text Files (*.txt),*.txt,” & _
“Lotus Files (*.prn),*.prn,” & _
“Comma Separated Files (*.csv),*.csv,” & _
“ASCII Files (*.asc),*.asc,” & _
“All Files (*.*),*.*”
‘ Display *.* by default
FilterIndex = 5
‘ Set the dialog box caption
Title = “Select a File to Import”
‘ Get the filename
FileName = Application.GetOpenFilename (FInfo, _
FilterIndex, Title)
‘ Handle return info from dialog box
If FileName = False Then
MsgBox “No file was selected.”
Else
MsgBox “You selected “ & FileName
End If
End Sub

Đây là hộp thoại Excel hiển thị khi bạn thực hiện thủ tục này. Giao diện có thể khác nhau, tùy thuộc vào phiên bản Windows bạn sử dụng và các tùy chọn hiển thị bạn đã đặt.

Trong một ứng dụng thực tế, bạn sẽ làm một cái gì đó có ý nghĩa hơn với tên tệp. Ví dụ: bạn có thể muốn mở nó bằng cách sử dụng một câu lệnh như thế này:

Workbooks.Open FileName

Lưu ý rằng biến FileName được khai báo là kiểu dữ liệu Biến. Nếu người dùng nhấp vào Hủy, biến đó chứa giá trị Boolean (Sai). Mặt khác, FileName là một chuỗi. Do đó, sử dụng kiểu dữ liệu Biến thể xử lý cả hai khả năng.

Xem thêm: Cách tùy chỉnh môi trường VBA thông qua tab Editor

Khóa học VBA Excel tại Hà Nội