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 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
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.
CHỨC NĂNG HÀM MỚI
Hướng dẫn sử dụng:
WaitDoneArguments (bản v3.x)
Các giá trị buttons - Kiểu các nút hiển thị:
Có thể viết mã các nhóm 1 + 2 + 3 + 4 + 5 cộng với nhau
Các giá trị MsgBox trả về:
Ví dụ đặt giá trị mặc định cho MsgBox:
Hàm InputBox mới:
Thủ tục ShowBalloonTip:
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ớ)
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:
VNiTelex v1.21 - Hàm mã hóa giải mã chuỗi Unicode và Tiếng Việt cho mã VBA
Hôm nay tôi lại chia sẻ cho các bạn một hàm mã hóa chuỗi Unicode Tiếng Việt để dễ dàng viết chuỗi tiếng Việt vào trong VBA với kiểu gõ Telex đặc trưng của người Việt. Lý do tại sao lại mã hóa? là vì trong VBA chỉ hỗ trợ lưu mã với một dạng mã hóa nhất định không hỗ trợ ký tự Unicode, nên cần...
www.giaiphapexcel.com
----------------------------------------------------------
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.
CHỨC NĂNG HÀM MỚI
- Nhập tiếng Việt trong tiêu đề, thông báo và trong TextBox.
- Đếm ngược thời gian để đóng Box.
- Nhập ẩn giá trị trong InputBox.
- Thêm các chuyển động hoạt ảnh hiện và ẩn Box sau khi hết đếm ngược.
- Thêm đối số nhận vị trí hiện cửa sổ.
- 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 đó. - 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.
- Thêm Icon cho cửa sổ
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ểu | Chức năng |
1 | Prompt | Chuỗi | Ô trả kết quả |
2 | buttons | Số | Kiểu các nút hiển thị |
3 | title | Chuỗi | Tiêu đề Box |
4 | Default | Số | Giá trị trả về nếu quá thời gian, mặc định 32000 |
5 | SecondsTimeOut | Số | Số giây đếm ngược để đóng box |
6 | hwnd | Số | Handle của Window mà Box trỏ vào |
7 | button1 | Chuỗi | Chuỗi thay thế Nút thứ nhất |
8 | button2 | Chuỗi | Chuỗi thay thế Nút thứ hai |
9 | button3 | Chuỗi | Chuỗi thay thế Nút thứ ba |
10 | Location | Số | 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 | WindowIcon | Object hoặc file | Đối tượng Picture - Icon cho MsgBox hoặc đường dẫn icon |
12 | ShowModal (v3.x) | Có/Không | Hiệ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 | TelexVNI | Có/Không | Tự động mã hóa chuỗi Unicode Telex |
WaitDoneArguments (bản v3.x)
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út | nút được. | 0 |
vbOKCancel | 1 | nút | Các nút OK và hủy. | 1 |
vbAbortRetryIgnore | 1 | nút | Các nút Hủy bỏ, Thử lại và Bỏ qua. | 2 |
vbYesNoCancel | 1 | nút | Các nút Có, Không và Hủy. | 3 |
vbYesNo | 1 | nút | Các nút Có và Không. | 4 |
vbRetryCancel | 1 | nút | Các nút Thử lại và Hủy. | 5 |
vbCritical | 2 | Biểu tượng | Biểu tượng Tin nhắn quan trọng. | 16 |
vbQuestion | 2 | Biểu tượng | Biểu tượng truy vấn cảnh báo. | 32 |
vbExclamation | 2 | Biểu tượng | Biểu tượng Thông báo Cảnh báo. | 48 |
vbInformation | 2 | Biểu tượng | Biể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ức | Khô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ức | Tươ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ác | Thê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ác | Căn phải văn bản. | 524288 |
vbMsgBoxRtlReading | 5 | Khác | Chỉ đị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 định | Chức năng |
1 | vbOk = 1 | Xác nhận |
2 | vbCancel = 2 | Hủy |
3 | vbAbort = 3 | Hủy bỏ |
4 | vbRetry = 4 | Thử lại |
5 | vbIgnore = 5 | Bỏ qua |
6 | vbYes = 6 | Có |
7 | vbNo = 7 | Không |
8 | vbOutTime = 32000 | Hế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
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 | DataArray | Mảng hoặc vùng ô |
2 | SpaceBetweenCols | Không gian khoảng cách chiều rộng các cột |
3 | HasArrayHeader | Mảng có đầu đề |
4 | TextColor | Mà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.
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 |
| |
---|---|---|---|---|
1 | Prompt | Chuỗi | Ô trả kết quả | |
2 | title | Chuỗi | Tiêu đề Box | |
3 | Default | Bất kỳ | Đặt giá trị trả về mặc định | |
4 | x | Số | Dịch cửa sổ ngang | |
5 | y | Số | Dịch cửa sổ dọc | |
6 | HelpFile | chuỗi | Tệp hướng dẫn | |
7 | Context | Chuỗi | ||
8 | SecondsTimeOut | Số | Số giây đếm ngược để đóng box | |
9 | CharPassword | Có/Không | Chuyển ký tự nhập thành dấu sao (*) | |
10 | hwnd | Số | 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 | Location | Số | 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 | WindowIcon | Object hoặc file | Đối tượng Picture - Icon cho MsgBox hoặc đường dẫn icon | |
13 | ShowModal (v3.x) | Có/Không | Hiện thị Box vẫn truy cập thao tác được trang tính | |
14 | TelexVNI | Có/Không | Tự động mã hóa chuỗi Unicode Telex |
Thủ tục ShowBalloonTip:
Hiển thị thông báo nổi Window
Vị trí | Tham số | Chức năng |
---|---|---|
1 | Message | Tin nhắn thông báo |
2 | title | Tiêu đề thông báo |
3 | Icon | Icon 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 | Timeout | Thờ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:
VBA_FastCode v2.2 - Công cụ học và viết mã VBA một cách nhanh nhất (27/10/2023)
***** CẬP NHẬT MỚI v2.2 ***** -------------------------------------------------------------------------- Add-in được chia sẻ dưới đây, đó là những gì tôi hiểu biết về VBA và đã viết ra nó. Một Add-in Tools chỉnh sửa code VBA rất đơn giản nhưng có thể giúp các bạn học VBA và viết code nhanh...
www.giaiphapexcel.com
-------------------------------------------------------------------
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
Lần chỉnh sửa cuối: