Khi macro đang thực thi giữa chừng, chúng ta muốn người dùng nhập dữ liệu vào, dữ liệu ấy có thể là số hay chuỗi ký tự, và chúng ta sẽ sử dụng inputbox.
Tôi ví dụ, người dùng sẽ nhập tên của mình vào inputbox và sau đó macro sẽ lấy giá trị này điền vào ô A1.
Đây không phải là kỹ thuật khó, nhưng có nhiều người không hiểu hết, vì vậy hôm nay, thông qua topic này, tôi muốn giới thiệu tất cả những vấn đề về inputbox.
Có hai loại inputbox.
Cái thứ hai đó là phương thức InputBox của Application Object.
Tới đây, các bạn sẽ thắc mắc, vậy hai cái này có gì khác nhau?
Phương thức Inputbox không phải là hàm, nó có thể sử dụng đối số [Type]. Đối số này có ý nghĩa gì thì tôi sẽ thuyết minh sau.
Hàm InputBox:
Cấu trúc:
Phương thức InputBox:
Cấu trúc:
Đối số của InputBox:
InputBox được sử dụng rất nhiều, giống như ở trên ta đã sử dụng InputBox("Hay nhap ten:"). Tuy nhiên ta cũng thấy rằng, nó có rất nhiều đối số, sau đây chúng ta sẽ lần lượt xem từng đối số có ý nghĩa gì nhé.
・Prompt
Đây là đối số nhất định phải chỉ định. Đối với InputBox, thì đây là đối số duy nhất phải khai báo, không thể giản lược. Các đối số khác thì bạn có thể giản lược.
Đối số Prompt trong InputBox sẽ chỉ định ký tự được hiển thị. Nó có thể là ký tự, số, ngày tháng, hay logic (True/False) nhưng thực tế trước khi thực thi, VBA sẽ chuyển nó thành kiểu dữ liệu là String. Hãy chú ý điều này.
Đối số Prompt thường sẽ hiển thị chuỗi ký tự trên một hàng. Nếu như bạn muốn xuống dòng, hãy sử dụng vbCrLf, đây là hằng số có ý nghĩa xuống dòng, nó có ý nghĩa tương tự Chr(13) và Chr(10). Để ngắn gọn, bạn hãy sử dụng hằng số vbCrLf.
・Title
Tham số này sẽ chỉ định dòng tiêu đề hiển thị trên hộp thoại khi hiện ra. Bạn có thể giản lược tham số này.
Nếu giản lược, thông thường dòng tiêu đề mặc định sẽ là "Microsoft Excel".
Bây giờ tôi sẽ thử chỉ định dòng tiêu đề là "tuhocvba.net" nhé:
・Default
Tham số này sẽ chỉ định giá trị mặc định cho InputBox. Tức là người dùng dù chưa nhập gì thì giá trị mặc định sẽ được hiển thị ra.
Chú ý rằng, giá trị mặc định này ta có thể chỉ định xuống dòng bằng vbCrLf. Tuy nhiên khi hiển thị trên InputBox thì ta lại không thấy điều này. Nhưng khi ấn Enter ta sẽ thấy kết quả được thể hiện. Ví dụ:
・XPosとYPos
Tham số này sẽ chỉ định tọa độ của InputBox.
Chú ý rằng, tọa độ này lấy cửa sổ Windows làm chuẩn, chẳng liên quan gì tới worksheet của Excel. Tôi di chuyển cửa sổ Excel đi xem kết quả ra sao nhé.
・HelpFileとContext(HelpContextId)
Tham số HelpFile sẽ chỉ định File Help được mở ra khi người dùng ấn vào nút Help trên InputBox.
Tham số Context hay HelpContextID sẽ chỉ định trang bên trong file Help được hiển thị ra.
Với hàm InputBox, nếu bạn chỉ định tham số HelpFile, thì nút bấm Help sẽ xuất hiện trên hộp thoại InputBox. Và nếu bạn click vào nó, thì trang mà bạn chỉ định trong file help sẽ được hiển thị ra. Nếu như máy tính không tìm thấy file Help thì hàm InputBox sẽ ra thông báo là nó "không tìm thấy file help".
Ở trên các bạn thấy nút bấm Help đã xuất hiện. Trong trường hợp không xuất hiện, hãy thử ấn F1, khi đó Help sẽ hiển thị ra.
Đối với nút Help này, tôi không thấy dùng mấy, các bạn có thể giản lược không khai báo tham số này. Nếu bạn có ý định chỉn chu trong thiết kế, tôi khuyên các bạn hãy sử dụng UserForm để chủ động theo ý mình.
・Type
Đối với phương thức InputBox thì đây là vũ khí lớn nhất. Tham số [Type] không dùng được cho hàm InputBox, hãy chú ý điều này. Nó chỉ được dùng cho phương thức InputBox. Để chỉ định kiểu dữ liệu trả về cho InputBox, ta sẽ dùng tham số này. Hãy tham khảo bảng dưới đây.
Type:=0
Ta nhập vào hàm số. Ví dụ: 「=SUM(A1:B2)」hoặcc là「=A1+B2」. Chú ý nhất định phải bắt đầu bằng dấu "=".
Type:=1
Giá trị nhập vào là số. Thường thì chúng ta hay sử dụng Type = 2, tức là nhập vào chuỗi ký tự. Khi chúng ta chỉ định Type = 1, tức là chúng ta chỉ chấp nhận đầu vào là số. Nếu không phải là số, sẽ có thông báo lỗi.
Bạn có thể nhập vào là số, hoặc nhập phép toán vào nhưng nó sẽ chỉ hiển thị ra kết quả của phép toán đó.
(Còn nữa)
Nguồn:
Tôi ví dụ, người dùng sẽ nhập tên của mình vào inputbox và sau đó macro sẽ lấy giá trị này điền vào ô A1.
Mã:
Sub Sample1()
Dim buf As String
buf = InputBox("Hay nhap ten cua ban")
Range("A1") = buf
End Sub
Có hai loại inputbox.
- Hàm InputBox
- Phương thức InputBox của Application Object.
Cái thứ hai đó là phương thức InputBox của Application Object.
Tới đây, các bạn sẽ thắc mắc, vậy hai cái này có gì khác nhau?
Phương thức Inputbox không phải là hàm, nó có thể sử dụng đối số [Type]. Đối số này có ý nghĩa gì thì tôi sẽ thuyết minh sau.
Hàm InputBox:
Cấu trúc:
Mã:
InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])
Bạn cần đăng nhập để thấy đính kèm
Phương thức InputBox:
Cấu trúc:
Mã:
Application.InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId],[Type])
Bạn cần đăng nhập để thấy đính kèm
Đối số của InputBox:
InputBox được sử dụng rất nhiều, giống như ở trên ta đã sử dụng InputBox("Hay nhap ten:"). Tuy nhiên ta cũng thấy rằng, nó có rất nhiều đối số, sau đây chúng ta sẽ lần lượt xem từng đối số có ý nghĩa gì nhé.
・Prompt
Đây là đối số nhất định phải chỉ định. Đối với InputBox, thì đây là đối số duy nhất phải khai báo, không thể giản lược. Các đối số khác thì bạn có thể giản lược.
Đối số Prompt trong InputBox sẽ chỉ định ký tự được hiển thị. Nó có thể là ký tự, số, ngày tháng, hay logic (True/False) nhưng thực tế trước khi thực thi, VBA sẽ chuyển nó thành kiểu dữ liệu là String. Hãy chú ý điều này.
Đối số Prompt thường sẽ hiển thị chuỗi ký tự trên một hàng. Nếu như bạn muốn xuống dòng, hãy sử dụng vbCrLf, đây là hằng số có ý nghĩa xuống dòng, nó có ý nghĩa tương tự Chr(13) và Chr(10). Để ngắn gọn, bạn hãy sử dụng hằng số vbCrLf.
Mã:
Sub Sample2()
Dim buf As String, msg As String
msg = "Hay nhap dia chi o day" & vbCrLf & _
"Neu la Ha Noi thi hay nhap ten quan"
buf = InputBox(msg)
Range("A1") = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
・Title
Tham số này sẽ chỉ định dòng tiêu đề hiển thị trên hộp thoại khi hiện ra. Bạn có thể giản lược tham số này.
Nếu giản lược, thông thường dòng tiêu đề mặc định sẽ là "Microsoft Excel".
Bây giờ tôi sẽ thử chỉ định dòng tiêu đề là "tuhocvba.net" nhé:
Mã:
Sub Sample2b()
Dim buf As String, msg As String
msg = "Hay nhap dia chi o day" & vbCrLf & _
"Neu la Ha Noi thi hay nhap ten quan"
buf = InputBox(msg, Title:="tuhocvba.net")
Range("A1") = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
・Default
Tham số này sẽ chỉ định giá trị mặc định cho InputBox. Tức là người dùng dù chưa nhập gì thì giá trị mặc định sẽ được hiển thị ra.
Mã:
Sub Sample2c()
Dim buf As String, msg As String
msg = "Hay nhap dia chi o day" & vbCrLf & _
"Neu la Ha Noi thi hay nhap ten quan"
buf = InputBox(msg, Default:="vbano1")
Range("A1") = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
Chú ý rằng, giá trị mặc định này ta có thể chỉ định xuống dòng bằng vbCrLf. Tuy nhiên khi hiển thị trên InputBox thì ta lại không thấy điều này. Nhưng khi ấn Enter ta sẽ thấy kết quả được thể hiện. Ví dụ:
Mã:
Sub Sample2d()
Dim buf As String, msg As String
msg = "Hay nhap dia chi o day" & vbCrLf & _
"Neu la Ha Noi thi hay nhap ten quan"
buf = InputBox(msg, Default:="vbano1" & vbCrLf & "Euler")
Range("A1") = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
・XPosとYPos
Tham số này sẽ chỉ định tọa độ của InputBox.
Mã:
Sub Sample4()
Dim buf As String
buf = InputBox(Prompt:="Hay nhap dia chi:", XPos:=1000, YPos:=2000)
ActiveCell = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
Chú ý rằng, tọa độ này lấy cửa sổ Windows làm chuẩn, chẳng liên quan gì tới worksheet của Excel. Tôi di chuyển cửa sổ Excel đi xem kết quả ra sao nhé.
Bạn cần đăng nhập để thấy đính kèm
・HelpFileとContext(HelpContextId)
Tham số HelpFile sẽ chỉ định File Help được mở ra khi người dùng ấn vào nút Help trên InputBox.
Tham số Context hay HelpContextID sẽ chỉ định trang bên trong file Help được hiển thị ra.
Với hàm InputBox, nếu bạn chỉ định tham số HelpFile, thì nút bấm Help sẽ xuất hiện trên hộp thoại InputBox. Và nếu bạn click vào nó, thì trang mà bạn chỉ định trong file help sẽ được hiển thị ra. Nếu như máy tính không tìm thấy file Help thì hàm InputBox sẽ ra thông báo là nó "không tìm thấy file help".
Mã:
Sub Sample101201()
Dim buf As String
buf = InputBox(Prompt:="Hay nhap dia chi:", HelpFile:="test.hlp", Context:=2)
ActiveCell = buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
Ở trên các bạn thấy nút bấm Help đã xuất hiện. Trong trường hợp không xuất hiện, hãy thử ấn F1, khi đó Help sẽ hiển thị ra.
Đối với nút Help này, tôi không thấy dùng mấy, các bạn có thể giản lược không khai báo tham số này. Nếu bạn có ý định chỉn chu trong thiết kế, tôi khuyên các bạn hãy sử dụng UserForm để chủ động theo ý mình.
・Type
Đối với phương thức InputBox thì đây là vũ khí lớn nhất. Tham số [Type] không dùng được cho hàm InputBox, hãy chú ý điều này. Nó chỉ được dùng cho phương thức InputBox. Để chỉ định kiểu dữ liệu trả về cho InputBox, ta sẽ dùng tham số này. Hãy tham khảo bảng dưới đây.
Giá trị | Kiểu |
---|---|
0 | Hàm số |
1 | Giá trị là số |
2 | Chuỗi ký tự |
4 | Logic (True/False) |
8 | Range |
16 | Lỗi Ví dụ: #N/A |
64 | Mảng dãy số |
Type:=0
Ta nhập vào hàm số. Ví dụ: 「=SUM(A1:B2)」hoặcc là「=A1+B2」. Chú ý nhất định phải bắt đầu bằng dấu "=".
Type:=1
Giá trị nhập vào là số. Thường thì chúng ta hay sử dụng Type = 2, tức là nhập vào chuỗi ký tự. Khi chúng ta chỉ định Type = 1, tức là chúng ta chỉ chấp nhận đầu vào là số. Nếu không phải là số, sẽ có thông báo lỗi.
Mã:
Sub Sample101202()
Dim buf As Integer
buf = Application.InputBox(Prompt:="Hay nhap so", Type:=1)
MsgBox buf
End Sub
Bạn cần đăng nhập để thấy đính kèm
Bạn có thể nhập vào là số, hoặc nhập phép toán vào nhưng nó sẽ chỉ hiển thị ra kết quả của phép toán đó.
Bạn cần đăng nhập để thấy đính kèm
(Còn nữa)
Nguồn:
Bạn cần đăng nhập để thấy link