MsgBox và InputBox v3.30: tiếng Việt, nhập ẩn, đếm ngược, bảng dữ liệu (Excel, Word, Access, PowerPoint)

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,614
Được thích
4,055
Giới tính
Nam
CẬP NHẬT MỚI v3.30 24/11/2024

Thêm nhập liệu tiếng Việt cho inputBox
Phương thức VBA.InputBox không hỗ trợ nhập chuỗi Unicode. Bản cập nhật mới giúp khắc phục nhược điểm này.
(Application.InputBox thì có hỗ trợ)
Thêm hoạt ảnh đóng cửa sổ khi nhấn nút để có cái nhìn trực quan, thay cho việc cửa sổ đóng ngay lập tức

----------------------------------------------------------

Thêm kiểu nhập thông báo và tiêu đề tiếng Việt với mã Telex, giúp nhập tiếng Việt nhanh hơn mà không cần phải mã hóa chuỗi. Với tham số TelexVNi:=True
JavaScript:
Sub MsgBox_unicodeTelex_test()
  Dim o As Object, s%, t$
  t = "Ma.x hoa.s va.f giai.r ma.x voi.ws VNiTelex"
  s = 4: Set o = Nothing
  MsgBox Prompt:="Tieu.e dde.ef va.f chuoi.ox tai.j thong.o bao.s nay.f dduoc.wj ma.x hoa.s\nvoi.ws ham.f VNiTelex va.f giai.r ma.x voi.ws VNiTelexDecode", _
        title:=t, Default:=vbYes, location:=ABLCursor, buttons:=vbYesNoCancel + vbCritical, TimeOutSeconds:=s, TelexVNI:=True
End Sub

Hướng dẫn tạo chuỗi Unicode tại bài viết:



----------------------------------------------------------
Hôm nay tôi chia sẻ với các bạn hai hàm MsgBox và InputBox mới này nhầm thay thế hàm mặc định trong VBA, được cải tiến để phù hợp với những nhu cầu người sử dụng, như: tiếng Việt, nhập ẩn giá trị, đếm ngược. Kỹ thuật viết mã để đếm ngược đóng Box rất linh hoạt khi đặt giá trị mặc định nút.

Mã được viết tận dụng Classes để tiết kiệm bộ nhớ, nhầm giảm quá trình thông dịch mã không cần thiết làm tổn hao tài nguyên máy tính.
objectBoxVni_table

CHỨC NĂNG HÀM MỚI
  1. Nhập tiếng Việt trong tiêu đề, thông báo và trong TextBox.
  2. Đếm ngược thời gian để đóng Box.
  3. Nhập ẩn giá trị trong InputBox.
  4. Thêm các chuyển động hoạt ảnh hiện và ẩn Box sau khi hết đếm ngược.
  5. Thêm đối số nhận vị trí hiện cửa sổ.
  6. Thêm hiện dữ liệu bảng trên MsgBox
    Điển hình với kiểu hiện dạng bảng này, rất linh hoạt trong việc muốn xem lại bảng ở trang tính khác nhanh chóng, không cần phải di chuyển đến trang tính đó.
  7. Hiệu ứng
    • Âm thanh khi hiện ẩn box, hoặc khi nhấn nút.
    • Chế độ Modaless, khi Box hiện lên thì vẫn có thể thao tác với trang tính.
    • Chế độ hiện box và đợi cho đến khi thực thi mã hoàn thành.
  8. Thêm Icon cho cửa sổ
msgbox_yes_no_cancel_001.jpg



Hướng dẫn sử dụng:
(Lưu ý: hàm mới nhưng thứ tự các tham số Parameters giống với hàm của VB)
Hàm MsgBox mới:
Hàm MsgBox mới này sẽ nhập được chuỗi Unicode và đếm ngược thời gian, với việc đặt thời gian và giá trị mặc định để nhận giá trị đã đặt khi hết thời gian chọn.
Hàm sử dụng trong mã VBA:
Call MsgBox(Prompt:="Xin ch" & ChrW(224) & "o")
Vị tríTham sốKiểuChức năng
1​
PromptChuỗiÔ trả kết quả
2​
buttonsSốKiểu các nút hiển thị
3​
titleChuỗiTiêu đề Box
4​
DefaultSốGiá trị trả về nếu quá thời gian, mặc định 32000
5​
SecondsTimeOutSốSố giây đếm ngược để đóng box
6​
hwndSốHandle của Window mà Box trỏ vào
7​
button1ChuỗiChuỗi thay thế Nút thứ nhất
8​
button2ChuỗiChuỗi thay thế Nút thứ hai
9​
button3ChuỗiChuỗi thay thế Nút thứ ba
10​
LocationSốVị trí cửa sổ sẽ hiển thị - (Chính giữa mặc định )
ABLCursor = 1 - Vị trí trỏ chuột
ABLCenter = 2 - Vị trí chính giữa
ABLTopCenter = 3 - Vị trí phía trên chính giữa
ABLBottomCenter = 4 - Vị trí phía dưới chính giữa
ABLRightTop = 5 - Vị trí phía dưới bên phải
ABLRightBottom = 6 - Vị trí phía trên bên phải
ABLLeftTop = 7 - Vị trí phía dưới bên trái
ABLLeftBottom = 8 - Vị trí phía trên bên trái
11​
WindowIconObject hoặc fileĐối tượng Picture - Icon cho MsgBox hoặc đường dẫn icon
12​
ShowModal
(v3.x)
Có/KhôngHiện thị Box vẫn truy cập thao tác được trang tính
13​
WaitDoneArguments
(v3.x)
Gọi lại thủ tục trong khi MsgBox đang bật
Ví dụ nhập:
MsgBox "WaitDone", WaitDoneArguments:=Array("HelloWorld", "a", 1)
Có nghĩa là: gọi lại thủ tục HelloWorld với đối số "a" và 1
Sau mỗi dòng mã phải gọi MsgBoxDone() để kết thúc
14​
TelexVNICó/KhôngTự động mã hóa chuỗi Unicode Telex


WaitDoneArguments (bản v3.x)
msgBox_waitDone.gif

Các giá trị buttons - Kiểu các nút hiển thị:
Hằng giá trị
Nhóm
Kiểu
Miêu tả
Giá trị
vbOKOnly
1​
nútnút được.
0​
vbOKCancel
1​
nútCác nút OK và hủy.
1​
vbAbortRetryIgnore
1​
nútCác nút Hủy bỏ, Thử lại và Bỏ qua.
2​
vbYesNoCancel
1​
nútCác nút Có, Không và Hủy.
3​
vbYesNo
1​
nútCác nút Có và Không.
4​
vbRetryCancel
1​
nútCác nút Thử lại và Hủy.
5​
vbCritical
2​
Biểu tượngBiểu tượng Tin nhắn quan trọng.
16​
vbQuestion
2​
Biểu tượngBiểu tượng truy vấn cảnh báo.
32​
vbExclamation
2​
Biểu tượngBiểu tượng Thông báo Cảnh báo.
48​
vbInformation
2​
Biểu tượngBiểu tượng Thông báo Thông tin.
64​
vbDefaultButton1
3​
nút mặc địnhĐặt nút 1 được chọn.
0​
vbDefaultButton2
3​
nút mặc địnhĐặt nút 2 được chọn.
256​
vbDefaultButton3
3​
nút mặc địnhĐặt nút 3 được chọn.
512​
vbDefaultButton4
3​
nút mặc địnhĐặt nút 4 được chọn. Lưu ý rằng sẽ chỉ có bốn nút nếu nút trợ giúp được bao gồm trong vbAbortRetryIgnore hoặc vbYesNoCancel.
768​
vbApplicationModal
4​
phương thứcKhông thể truy cập Excel trong khi nút được hiển thị. Msgbox chỉ được hiển thị khi Excel là ứng dụng đang hoạt động.
0​
vbSystemModal
4​
phương thứcTương tự như vbApplicationModal nhưng hộp thông báo được hiển thị trước tất cả các ứng dụng.
4096​
vbMsgBoxHelpButton
5​
KhácThêm một nút trợ giúp
16384​
vbMsgBoxSetForeground
5​
KhácĐặt cửa sổ hộp thông báo làm cửa sổ tiền cảnh
65536​
vbMsgBoxRight
5​
KhácCăn phải văn bản.
524288​
vbMsgBoxRtlReading
5​
KhácChỉ định văn bản sẽ xuất hiện dưới dạng đọc từ phải sang trái trên các hệ thống tiếng Do Thái và tiếng Ả Rập.
1048576​



Có thể viết mã các nhóm 1 + 2 + 3 + 4 + 5 cộng với nhau
Ví dụ:
v = MsgBox(prompt:="Hello world!",button:=vbYesNoCancel + vbInformation + vbDefaultButton2 + vbSystemModal + vbMsgBoxSetForeground)


Các giá trị MsgBox trả về:
#​
Giá trị mặc địnhChức năng
1​
vbOk = 1Xác nhận
2​
vbCancel = 2Hủy
3​
vbAbort = 3Hủy bỏ
4​
vbRetry = 4Thử lại
5​
vbIgnore = 5Bỏ qua
6​
vbYes = 6
7​
vbNo = 7Không
8​
vbOutTime = 32000Hết thời gian chọn




Ví dụ đặt giá trị mặc định cho MsgBox:
Nếu gọi như sau:​
Call MsgBox(Prompt:="Xin ch" & ChrW(224) & "o",Default:=VbOk,Button:=VbOkCancel)
Thì sau khi hết thời gian chọn thì giá trị VbOk sẽ được trả về.
Và đếm ngược sẽ hiện thị tại nút vbOk. Nếu không đếm ngược sẽ hiện tại nút vbCancel​
msgbox_yes_no_cancel_001.jpg
Hàm MsgBoxBuildTable - Bổ trợ cho hàm MsgBox để hiển thị Bảng dữ liệu lên Box
#​
Tham sốNhập
1​
DataArrayMảng hoặc vùng ô
2​
SpaceBetweenColsKhông gian khoảng cách chiều rộng các cột
3​
HasArrayHeaderMảng có đầu đề
4​
TextColorMàu chữ



(Hãy gọi hàm MsgBoxBuildTable trước khi gọi hàm MsgBox)​


Hàm InputBox mới:
(***Lưu ý: InputBox này là hàm thuộc VBA khác với Application.InputBox)
Hàm InputBox mới này sẽ nhập được chuỗi Unicode và đếm ngược thời gian, tùy chọn ẩn giá trị nhập đổi thành dấu sao (*). Có tùy chọn hiện Box ngay tại vị trí chuột.
inputbox_001.jpg
Hàm sử dụng trong mã VBA:
Call InputBox(Prompt:="Xin ch" & ChrW(224) & "o",CharPassword:=True,ShowUnderCursor:=True)
Vị tríTham số Kiểu
Chức năng
1​
PromptChuỗiÔ trả kết quả
2​
titleChuỗiTiêu đề Box
3​
DefaultBất kỳĐặt giá trị trả về mặc định
4​
xSốDịch cửa sổ ngang
5​
ySốDịch cửa sổ dọc
6​
HelpFilechuỗiTệp hướng dẫn
7​
ContextChuỗi
8​
SecondsTimeOutSốSố giây đếm ngược để đóng box
9​
CharPasswordCó/KhôngChuyển ký tự nhập thành dấu sao (*)
10​
hwndSốHandle của Window mà Box trỏ vào
(Nếu ShowUnderCursor là False thì cửa sổ hiện thị chính giữa cửa sổ)
11​
LocationSốVị trí cửa sổ sẽ hiển thị - (Chính giữa mặc định )
ABLCursor = 1 - Vị trí trỏ chuột
ABLCenter = 2 - Vị trí chính giữa
ABLTopCenter = 3 - Vị trí phía trên chính giữa
ABLBottomCenter = 4 - Vị trí phía dưới chính giữa
ABLRightTop = 5 - Vị trí phía dưới bên phải
ABLRightBottom = 6 - Vị trí phía trên bên phải
ABLLeftTop = 7 - Vị trí phía dưới bên trái
ABLLeftBottom = 8 - Vị trí phía trên bên trái
12​
WindowIconObject hoặc fileĐối tượng Picture - Icon cho MsgBox hoặc đường dẫn icon
13​
ShowModal
(v3.x)
Có/KhôngHiện thị Box vẫn truy cập thao tác được trang tính
14​
TelexVNICó/KhôngTự động mã hóa chuỗi Unicode Telex


Thủ tục ShowBalloonTip:
Hiển thị thông báo nổi Window
BallonTip.png

Vị tríTham số
Chức năng​
1​
MessageTin nhắn thông báo
2​
titleTiêu đề thông báo
3​
IconIcon thông báo
beNone = 0 không có icon
beInformation = 1 thông tin
beWarning = 2 Cảnh báo
beError = 3 Lỗi
beNoSound = &H10 Không có âm thanh
4​
TimeoutThời gian tự động đóng thông báo



Ví dụ: thông báo tin nhắn "Hello Excel!", Tiêu đề là "Cảnh báo", với thông báo lỗi và không có âm thanh.​
ShowBalloonTip "Hello Excel!", "Canh.r bao.s", beError Or beNoSound​


Mã tương thích của hai hàm MsgBox và InputBox có thể hoạt động ở đa số phiên bản Office và ứng dụng Office gồm Excel, Word, Access, PowerPoint


Để sử dụng được hai hàm mới hãy sao chép Module và Class trong tệp ứng dụng bên dưới vào dự án của bạn.

-------------------------------------------------------------------
Để có thể viết mã nhanh chóng hoặc chuyển chuỗi Unicode tiếng Việt thành mã các bạn hãy tham khảo Tools VBA:

-------------------------------------------------------------------
Bạn có thể đọc thêm các bài biết của tôi tại tag #sanbi udf

Sao chép vào dự án của bạn:
Tải về và vào VBA kéo module và class module vào dự án Excel khác, Word, Access, và PowerPoint của bạn.

(Tệp sử dụng Classes tiết kiệm bộ nhớ)
 

File đính kèm

  • ObjectBoxVNI_v3.30.xlsm
    264.7 KB · Đọc: 3
Lần chỉnh sửa cuối:
Giải pháp
CẬP NHẬT MỚI 03/08/2024

  1. Sửa mã nguồn phiên bản cũ
  2. Thêm thủ tục tạo thông báo nổi Window

Thủ tục ShowBalloonTip:
Hiển thị thông báo nổi Window
BallonTip.png

Vị tríTham số
Chức năng​
1​
MessageTin nhắn thông báo
2​
titleTiêu đề thông báo
3​
IconIcon thông báo
beNone = 0 không có icon
beInformation = 1 thông tin
beWarning = 2 Cảnh báo
beError = 3 Lỗi
beNoSound = &H10 Không có âm thanh
...
Hôm nay tôi chia sẻ với các bạn hai hàm MsgBox và InputBox mới này nhầm thay thế hàm mặc định trong VBA, được cải tiến để phù hợp với những nhu cầu người sử dụng, như: tiếng Việt, nhập ẩn giá trị, đếm ngược. Kỹ thuật viết mã để đếm ngược đóng Box rất linh hoạt khi đặt giá trị mặc định nút.

Mã được viết tận dụng Classes để tiết kiệm bộ nhớ, nhầm giảm quá trình thông dịch mã không cần thiết làm tổn hao tài nguyên máy tính.


Hướng dẫn sử dụng:
(Lưu ý: hàm mới nhưng thứ tự các tham số Parameters giống với hàm của VB)
Hàm MsgBox mới:
Hàm MsgBox mới này sẽ nhập được chuỗi Unicode và đếm ngược thời gian, với việc đặc thời gian và giá trị mặc định để nhận giá trị đã đặt khi hết thời gian chọn.
Hàm sử dụng trong mã VBA:
Call MsgBox(Prompt:="Xin ch" & ChrW(224) & "o")

Vị tríTham sốKiểuChức năng
1​
PromptChuỗiÔ trả kết quả
2​
buttonsSốKiểu các nút hiển thị
3​
titleChuỗiTiêu đề Box
4​
DefaultSốGiá trị trả về nếu quá thời gian, mặc định 32000
5​
TimeOutSecondsSốSố giây đếm ngược để đóng box
6​
hwndSốHandle của Window
7​
button1ChuỗiChuỗi thay thế Nút thứ nhất
8​
button2ChuỗiChuỗi thay thế Nút thứ hai
9​
button3ChuỗiChuỗi thay thế Nút thứ ba
10​
ShowUnderCursorCó/KhôngHiện Box ngay tại vị trí con trỏ chuột

Các giá trị buttons - Kiểu các nút hiển thị:

#​
Giá trị mặc địnhCác nút hiển thị
1​
vbOkOnly = 0Xác nhận
2​
vbOkCancel = 1Xác nhận + Hủy
3​
vbAbortRetryIgnore = 2Hủy bỏ + Thử lại + Thử lại
4​
vbYesNoCancel = 3Có + Không + Hủy
5​
vbYesNo = 4Có + Không
6​
vbRetryCancel = 5Thử lại + Hủy

Các giá trị MsgBox trả về:

#​
Giá trị mặc địnhChức năng
1​
vbOk = 1Xác nhận
2​
vbCancel = 2Hủy
3​
vbAbort = 3Hủy bỏ
4​
vbRetry = 4Thử lại
5​
vbIgnore = 5Bỏ qua
6​
vbYes = 6
7​
vbNo = 7Không
8​
vbOutTime = 32000Hết thời gian chọn

Ví dụ đặt giá trị mặc định cho MsgBox:
Nếu gọi như sau:​
Call MsgBox(Prompt:="Xin ch" & ChrW(224) & "o",Default:=VbNo,Button:=VbYesNoCancel)
Thì sau khi hết thời gian chọn thì giá trị VbNo sẽ được trả về.
Và đếm ngược sẽ hiện thị tại nút vbNo. Nếu không đếm ngược sẽ hiện tại nút vbCancel​

Hàm InputBox mới:
Hàm InputBox mới này sẽ nhập được chuỗi Unicode và đếm ngược thời gian, tùy chọn ẩn giá trị nhập đổi thành dấu sao (*). Có tùy chọn hiện Box ngay tại vị trí chuột.
Hàm sử dụng trong mã VBA:
Call InputBox(Prompt:="Xin ch" & ChrW(224) & "o",CharPassword:=True,ShowUnderCursor:=True)

Vị tríTham sốKiểuChức năng
1​
PromptChuỗiÔ trả kết quả
2​
titleChuỗiTiêu đề Box
3​
DefaultBất kỳĐặt giá trị trả về mặc định
4​
xSốDịch cửa sổ ngang
5​
ySốDịch cửa sổ dọc
5​
HelpFilechuỗiTệp hướng dẫn
6​
ContextChuỗi
7​
TimeOutSecondsSốSố giây đếm ngược để đóng box
8​
CharPasswordCó/KhôngChuyển ký tự nhập thành dấu sao (*)
9​
ShowUnderCursorCó/KhôngHiện Box ngay tại vị trí con trỏ chuột


****Thủ tục bổ trợ để tạo mã từ chuỗi tiếng Việt:
Hãy chạy thủ tục MakeCodeUnicode, và nhập tiếng Việt vào Box, chuỗi sẽ được chuyển thành mã và lưu vào Clipboadrd





Để sử dụng được hai hàm mới hãy sao chép Module và Class trong tệp ứng dụng bên dưới vào dự án của bạn.

-------------------------------------------------------------------
Để có thể viết mã nhanh chóng hoặc chuyển chuỗi Unicode tiếng Việt thành mã các bạn hãy tham khảo Tools VBA:

-------------------------------------------------------------------
Bạn có thể đọc thêm các bài biết của tôi tại tag #sanbi udf
Thử trên máy mình, thì bị lỗi tiếng Việt:
1685675416660.png
 
Upvote 0
@Nhattanktnn Bạn thử lại, không biết thông số windows và office của bạn khác thế nào mà có lỗi này.
 
Upvote 0
Upvote 0
@Nhattanktnn Hàm MsgBox không bị lỗi phải không bạn.
Bạn tải lại lần nữa.
Lí do là cửa sổ InputBox trên máy của bạn được cấu hình khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Cái lỗi này chắc còn liên quan đến thiết lập trong Region nữa.
 
Upvote 0
*** Cập nhật: Bổ sung tệp cho hai hàm MsgBox và InputBox mã viết chỉ ở trong một Module duy nhất.
 
Upvote 0
***** CẬP NHẬT ObjectBoxVNI 2.1 *****
Thêm tùy chọn Hiển thị Box chính giữa cửa sổ
 
Upvote 0
***** SIÊU CẬP NHẬT MỚI v2.3 *****

  1. Thêm các chuyển động hoạt ảnh hiện và ẩn Box sau khi hết đếm ngược.
  2. Thêm đối số nhận vị trí hiện cửa sổ
  3. Thêm hiện dữ liệu bảng trên MsgBox
  4. Thêm Icon cho cửa sổ
    msgbox_yes_no_cancel_001.jpg
  5. Sửa lỗi unicode trong ô nhập InputBox

Với bản cập nhật này hàm MsgBox InputBox sẽ tuyệt vời hơn

**** Dự kiến bản cập nhật tiếp sẽ cho phép thêm ảnh vào MsgBox và InputBox.

Các bạn hãy đọc lại bài viết chính để xem chi tiết cập nhật


objectBoxVni_table
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom