MsgBox và InputBox v3.28: 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,610
Được thích
4,046
Giới tính
Nam
**** CẬP NHẬT MỚI 13/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ê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.29.xlsm
    257.9 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
...
Phát hiện lỗi nhập mảng nên tôi đã cập nhật v2.2 lên v2.3
 
Upvote 0
***** CẬP NHẬT MỚI v2.4 *****
Mã tương thích tất cả phiên bản Office và ứng dụng Office Excel, Word, Access, PowerPoint


Bạn cho mình hỏi muốn dùng hộp thoại Inputbox hiển thì được tiếng việt trong word thì làm thế nào ạ?

Câu hỏi của bạn khá là hay, tôi đã viết mã tương thích hầu hết ứng dụng Office các phiên bản vào bản mới v2.4, bạn chỉ cần tải về vào VBA kéo module và class module vào dự án Office của bạn, và sử dụng hai hàm trên.
 
Lần chỉnh sửa cuối:
Upvote 0
***** CẬP NHẬT MỚI v2.4 *****
Mã tương thích tất cả phiên bản Office và ứng dụng Office Excel, Word, Access, PowerPoint




Câu hỏi của bạn khá là hay, tôi đã viết mã tương thích hầu hết ứng dụng Office các phiên bản vào bản mới v2.4, bạn chỉ cần tải về vào VBA kéo module và class module vào dự án Office của bạn, và sử dụng hai hàm trên.
Cảm ơn bạn nhiều. Đúng cái mình tìm bấy lâu nay.
 
Upvote 0
***** CẬP NHẬT MỚI v2.4 *****
Mã tương thích tất cả phiên bản Office và ứng dụng Office Excel, Word, Access, PowerPoint




Câu hỏi của bạn khá là hay, tôi đã viết mã tương thích hầu hết ứng dụng Office các phiên bản vào bản mới v2.4, bạn chỉ cần tải về vào VBA kéo module và class module vào dự án Office của bạn, và sử dụng hai hàm trên.
Xin cho mình hỏi sao mình làm thế này mà bảng inputbox không hiện ra giữa cửa sổ?1687701969195.png
 
Upvote 0
HeSanbi để MsgBox hiện thị thêm biểu tượng trong thông báo nữa được không bạn?1688106449599.png
 
Upvote 0
***** DEMO BẢN v3.0 *****
Thêm nhiều chức năng:
  1. Âm thanh khi hiện ẩn box, hoặc khi nhấn nút.
  2. Chế độ Modaless: khi Box hiện lên thì vẫn có thể thao tác với trang tính.
  3. Chế độ hiện box và đợi cho đến khi thực thi mã hoàn thành.
 
Upvote 0
Mình có thử thì thấy msgbox thì ok , còn nhấn thử vào "Nhấn Thử InputBox nhập" thì excel đơ luôn ,thử đi thử lại vài lần vẫn vậy
 
Upvote 0
Bản 3 hay 2 vậy 2 bạn
 
Upvote 0
***** CẬP NHẬT Bản v2.7 và v3.1 *****
Sửa lỗi làm ngưng Excel
 
Upvote 0
***** CẬP NHẬT BẢN v3.2 *****

Thêm kiểu nhập thông báo và tiêu đề tiếng Việt với mã Telex

Ví dụ mã:
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:
 
Lần chỉnh sửa cuối:
Upvote 0
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
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​
 
Upvote 0
Giải pháp
Web KT

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

Back
Top Bottom