MsgBox tiếng Việt Unicode đơn giản với sự trợ giúp của hàm Macro 4

Liên hệ QC
Em đã setup đủ các font cho máy tính rồi mà sao không thể viết được font unicode trong vba????
Mà khi chỉnh vietnamese cho language setting thì excel sẽ tự động chỉnh các mặc định theo quy định việt nam (ví dụ như "." thành ",") như thế rất bất tiện.
Các Anh chỉ giúp E!
Bác nhớ vẫn xài phải xài bàn phím bằng english ấy !!!sẽ hết bị như thế!!!
 
Có nhiều giải pháp cho MsgBox tiếng Việt Unicode, ở đây xin giới thiệu 1 giải pháp cực đơn giản với sự trợ giúp của hàm Macro 4
Các bước thực hiện:
1> Tạo 1 Name với nội dụng là đoạn text mà bạn cần hiển thị
ví dụ: MsgText ="Đây là MsgBox tiếng Việt"
2> Vẽ 1 CommandButton và chèn đoạn code này vào:
PHP:
Private Sub CommandButton2_Click()
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,2)")
End Sub
Lưu ý:
- Tham số2 trong đoạn code có thể thay thế từ 1 đến 3 (hãy thay thế và thí nghiệm xem thử)
- Xem file đính kèm (bên trong có luôn 1 đoạn hiển thị Statusbar cũng bằng macro 4)
Bài viết này tham khảo từ cách làm của bạn Đào Việt Cường (nhưng rút gọn để các bạn dể hiểu hơn)
Mến
ANH TUẤN
Em kiến thức còn kém xin hỏi.phần tạo cái này làm như thé nào:Tạo 1 Name với nội dụng là đoạn text mà bạn cần hiển thị
MsgText ="Đây là MsgBox tiếng Việt".em không hiểu chỗ này mong mọi người chi thêm​
 
Em kiến thức còn kém xin hỏi.phần tạo cái này làm như thé nào:Tạo 1 Name với nội dụng là đoạn text mà bạn cần hiển thị
MsgText ="Đây là MsgBox tiếng Việt".em không hiểu chỗ này mong mọi người chi thêm
Bạn mở file lên, vào menu Insert\Name\Define là tự nhiên sẽ hiểu
 
Còn tiêu đề của Msg thì hình như không có cách thay đổi

PHƯƠNG ÁN 1:

Nếu bạn muốn dùng Msgbox thì cần dùng bảng mã CP 1258.
Để sử dụng CP 1258 bạn cần:
1 - Chọn cài đặt các file cần thiết cho CP 1258.
2 - Đặt sẵn CP 1258 cho mã nguồn non-Unicode.
3 - Chạy bộ gõ mà có hổ trợ bảng mã 1258. Đề cử bạn dùng Unikey.
4 - Format trang VBE của bạn sang font Vietnamese.

Cái số 1: Vào Control Panel / Region Language, ở tab Language chọn Install for East Asian Language. Nếu máy bạn đã có thì sang số 2.
Cái số 2: Vào Control Panel / Region Language, ở tab Advanced chọn Vietnamese.
Cái số 3: Không có gì đặt biệt, bạn chỉ cần dùng Unikey và chọn bảng mã CP 1258 để sẵn sàng gõ tiếng Việt.
Cái số 4: Trong VBE của Excel bạn chọn To ols/ Option/ Editor Format và chọn font unicode có chữ (Vietnamese) ở phía sau.
---- Bạn chỉ thấy xuất hiện font này khi bạn có thực hiện bước số 1 ----

Chú ý:
- Chủ yếu là bạn phải cài file cho East Asian Language và đặt codepage 1258 cho các program non-unicode, không cần phải chọn tất cả các cái trong Region Language sang Vietnamese chẳng hạn như là kiểu tiền, dấu thập phân ... (nếu bạn không thích).
(Hướng dẫn của quan314k ở bài trước là chọn lung tùng phèng mà không nhớ là mình chọn cái đó để làm gì).
- Dĩ nhiên bạn phải chọn trong Unikey bảng mã 1258 và format trang đang viết trong VBE sang Vietnamese - ví dụ bạn chọn Tahoma(Vietnamese) - là để bạn đọc được các tiếng Việt mà bạn gõ vào.
- Quan trọng:
Bạn đang dùng CP 1258 thì dĩ nhiên nó khác với UTF-8 (CP 65001). Dù sao đi nữa thì CP 65001 vẫn phổ biến hơn. Các trang web vẫn xài UTF-8. Hãy cân nhắc khi quyết định sử dụng CP 1258, bởi vì tôi đoán chắc rằng dữ liệu trong máy của bạn phần lớn là dùng UTF-8. Nó sẽ gây khó khăn nếu bạn cần so sánh chuỗi trong dữ liệu với nội dung của Msgbox.
Tuy nhiên nếu bạn dùng HTML Help Workshop để làm file hướng dẫn .CHM thì bạn cần làm quen với CP 1258. Nhưng dù sao thì nó cũng là 1 phần mềm riêng, sau khi bạn đã biên dịch sang .chm thì bạn có thể trả default codepage ở máy của bạn về CP 1252 mà file .chm của bạn vẫn chạy ngon lành. Bởi vì nó đã được biên dịch sang mã máy rồi.
Trong khi đó với VBA thì nó sẽ biên dịch lại mỗi khi bạn sửa code. Vì thế, bạn sẽ phải để luôn máy của bạn ở CP 1258 (cái bước số 2 ấy mà). Nếu mang sang máy khác thì không hiển thị tiếng Việt CP 1258 được - nếu như máy đó đặt codepage khác đi - vì nó sẽ không biên dịch đúng CP.


PHƯƠNG ÁN 2:

Bạn vẫn muốn dùng UTF-8 hơn là CP 1258.
Đây là yêu cầu chính đáng thôi.
Vì thế bạn đã dùng Macro4.Alert thay cho dùng Msgbox.

Ưu thế của phương án 1 so với phương án này là: bạn có thể dùng CP 1258 ở mọi nơi như là trong trang VBE, trong form, trong cửa sổ properties...
Nói nào ngay, với VNI và TCVN3 bạn cũng làm được như thế. Chỉ có điều CP 1258 dùng chung font với unicode nên nó đẹp hơn (chỉ thua cái font Thư Pháp thôi).

Trong phương án 2 này tôi đề nghị bạn thử dùng Assistant.DoAlert thay vì dùng Macro4.Alert
Như thế bạn có thể đặt tiêu đề tiếng Việt. Ngoài ra các nút OK, Cancel ... cho bạn sử dụng cũng nhiều hơn.
Cú pháp:

Application.Assistant.DoAlert(bstrAlertTitle, bstrAlertText, MsoAlertButtonType, MsoAlertIconType, MsoAlertDefaultType, MsoAlertCancelType, varfSysAlert)

(Bạn xem thêm hướng dẫn trong Help của Microsoft)

Nhắc lại: bạn không thể gõ trực tiếp Unicode dựng sẵn hoặc UTF-8 vào VBE được.
Bạn có thể gõ AlertTitle và AlertText vào 1 cell nào đó trong bảng tính, hoặc gán vào 1 cái Name nào đó, hoặc gõ vào 1 cái label nào đó trong 1 cái form ... rồi sau đó gán vào DoAlert.

Trong một số tình huống không quan trọng mà bạn không cần xử lý chuỗi trong AlertText, chỉ đơn giản là bạn muốn hiển thị thông báo mà thôi thì đề nghị bạn áp dụng biện pháp bổ sung:
Dùng bảng mã CP 1258 để gõ vào VBE (Nhớ chọn Editor Format là Tahoma(Vietnamese) để đọc được cái mình gõ vào).

Cú pháp:
Application.Assistant.DoAlert( _
StrConv(StrConv("Đây là tiêu đề tiếng Việt", vbFromUnicode), vbUnicode, 1066), _
StrConv(StrConv("Còn chỗ này là nội dung", vbFromUnicode), vbUnicode, 1066), _
msoAlertButtonYesAllNoCancel, _
msoAlertIconCritical, _
msoAlertDefaultSecond, _
msoAlertCancelFirst, _
False)
--- Chỗ tiếng Việt ở trên nhớ gõ bằng CP 1258 nhé bạn và nhớ xem thêm về hàm StrConv() ---
 

File đính kèm

  • msgboxtiengViet.xls
    30 KB · Đọc: 231
PHƯƠNG ÁN 1:

Nếu bạn muốn dùng Msgbox thì cần dùng bảng mã CP 1258.
Để sử dụng CP 1258 bạn cần:
1 - Chọn cài đặt các file cần thiết cho CP 1258.
2 - Đặt sẵn CP 1258 cho mã nguồn non-Unicode.
3 - Chạy bộ gõ mà có hổ trợ bảng mã 1258. Đề cử bạn dùng Unikey.
4 - Format trang VBE của bạn sang font Vietnamese.

Cái số 1: Vào Control Panel / Region Language, ở tab Language chọn Install for East Asian Language. Nếu máy bạn đã có thì sang số 2.
Cái số 2: Vào Control Panel / Region Language, ở tab Advanced chọn Vietnamese.
Cái số 3: Không có gì đặt biệt, bạn chỉ cần dùng Unikey và chọn bảng mã CP 1258 để sẵn sàng gõ tiếng Việt.
Cái số 4: Trong VBE của Excel bạn chọn To ols/ Option/ Editor Format và chọn font unicode có chữ (Vietnamese) ở phía sau.
---- Bạn chỉ thấy xuất hiện font này khi bạn có thực hiện bước số 1 ----
.........................
-
Cảm ơn những chia sẽ của bạn! Điều quan trọng mà người dùng muốn (và tôi cũng muốn) là sử dụng được tiếng Việt Unicode mà không phải chỉnh gì trong hệ thống ấy chứ
 
Thì chọn phương án 2 và tự mình hạn chế thèm muốn khi thấy người ta xài Msgbox thoải mái.
 
Thì chọn phương án 2 và tự mình hạn chế thèm muốn khi thấy người ta xài Msgbox thoải mái.
Uh... học thêm được 1 cách mới
Có điều phương án 2 này nó cũng đâu có hiện được Tiếng Việt Unicod TRÊN TIÊU ĐỀ đâu nè?
Thêm nữa, topic này là MsgBox tiếng Việt Unicode đơn giản.... Nếu mà giải pháp rắc rối quá tôi thà xài UserForm cho nó khỏe ---> Tiêu đề hay nội dung gì cũng gõ tiếng Việt được ráo trọi
 
Lần chỉnh sửa cuối:
Uh... học thêm được 1 cách mới
Có điều phương án 2 này nó cũng đâu có hiện được Tiếng Việt Unicod TRÊN TIÊU ĐỀ đâu nè?
Thêm nữa, topic này là MsgBox tiếng Việt Unicode đơn giản.... Nếu mà giải pháp rắc rối quá tôi thà xài UserForm cho nó khỏe ---> Tiêu đề hay nội dung gì cũng gõ tiếng Việt được ráo trọi

Đọc kỹ hướng dẫn trước khi dùng! :-=:-=:-=
Bạn mở cái file tôi gửi kèm lên thì thấy thôi mà.
 
Đọc kỹ hướng dẫn trước khi dùng! :-=:-=:-=
Bạn mở cái file tôi gửi kèm lên thì thấy thôi mà.

Bạn ơi, tiêu đề cùa Thầy AnhTuan1066 nói rất rõ là dùng Macro4 để tạo nên Msgbox bằng tiếng Việt, nhưng để bạn thấy rằng có nhiều cách để tạo Caption cho Form, cũng như Msgbox bằng tiếng Việt, mình xin gửi một File lên cho các bạn cùng xem nhé! Chỉ là tổng hợp chất xám của diễn đàn chúng ta thôi.

1) UserForm có Caption Tiếng Việt:

attachment.php


2) MsgBox có Caption và nội dung bằng Tiếng Việt:

attachment.php
 
Lần chỉnh sửa cuối:
Bạn ơi, tiêu đề cùa Thầy AnhTuan1066 nói rất rõ là dùng Macro4 để tạo nên Msgbox bằng tiếng Việt, nhưng để bạn thấy rằng có nhiều cách để tạo Caption cho Form, cũng như Msgbox bằng tiếng Việt, mình xin gửi một File lên cho các bạn cùng xem nhé! Chỉ là tổng hợp chất xám của diễn đàn chúng ta thôi.
....

Tôi có nói gì về MessageBoxW không ta??? Hình như là chưa.

1/. Nếu nói dùng Alert không hiển thị được tiêu đề tiếng Việt: đề nghị thử Assistant.DoAlert
2/. Nếu dùng bất cứ cái gì thuộc dạng ký sinh để chứa tiếng Việt thì có nhiều cách; còn nếu muốn gõ tiếng Việt vào VBE: cần dùng CP1258.

Thế thôi.
Dùng cái nào là chuyện của bạn.
 
Tôi có nói gì về MessageBoxW không ta??? Hình như là chưa.

1/. Nếu nói dùng Alert không hiển thị được tiêu đề tiếng Việt: đề nghị thử Assistant.DoAlert
2/. Nếu dùng bất cứ cái gì thuộc dạng ký sinh để chứa tiếng Việt thì có nhiều cách; còn nếu muốn gõ tiếng Việt vào VBE: cần dùng CP1258.

Thế thôi.
Dùng cái nào là chuyện của bạn.

Xin lỗi bạn, tôi không hiểu rõ những gì bạn nói trong phần tô đỏ. Bạn có thể giải thích được không? Như thế nào gọi là "ký sinh" hả bạn?
 
Dear minhthien321,
------------------

Chắc ý bạn ấy muốn nói những thứ mà không thể hoạt động một cách độc lập mà phải dựa vào thứ khác (chữ "ký sinh" ở đây không mang nghĩa sinh học(?!)). Cụ thể trong giải pháp mà bạn nêu (thực ra đã có trên diễn đàn), MsgBox muốn hiển thị được Unicode thì cần phải có MessageBoxW và phải qua hàng loạt các khai báo hàm hệ thống - không phù hợp với tiêu chí "đơn giản" của đề tài này!

Cám ơn muontennguoikhac (đã đến lúc không cần mượn nữa đâu) đã nêu một giải pháp cũng khá hữu ích!
 
Dear minhthien321,
------------------

Chắc ý bạn ấy muốn nói những thứ mà không thể hoạt động một cách độc lập mà phải dựa vào thứ khác (chữ "ký sinh" ở đây không mang nghĩa sinh học(?!)). Cụ thể trong giải pháp mà bạn nêu (thực ra đã có trên diễn đàn), MsgBox muốn hiển thị được Unicode thì cần phải có MessageBoxW và phải qua hàng loạt các khai báo hàm hệ thống - không phù hợp với tiêu chí "đơn giản" của đề tài này!

Cám ơn muontennguoikhac (đã đến lúc không cần mượn nữa đâu) đã nêu một giải pháp cũng khá hữu ích!

Tôi xin giải thích thêm 1 chút nữa: nói ký sinh nghĩa là tiếng Việt phải được gõ vào 1 cell hoặc đặt vào 1 name hoặc đặt vào 1 file .txt trên dĩa ... nói chung là những trường hợp không thể gõ trực tiếp trong cửa sổ VBE.
 
Tôi xin giải thích thêm 1 chút nữa: nói ký sinh nghĩa là tiếng Việt phải được gõ vào 1 cell hoặc đặt vào 1 name hoặc đặt vào 1 file .txt trên dĩa ... nói chung là những trường hợp không thể gõ trực tiếp trong cửa sổ VBE.

Cám ơn bạn Đào Việt Cường và bạn muontennguoikhac. Tôi rất vui khi được các bạn giới thiệu cách làm mới hoàn toàn có lý và hợp lý, tuy nhiên, hầu hết các File, kể cả trang web và cách lập trình, không ai mang gánh nặng trong một File cả, họ thường dùng cái gọi là "ký sinh" để thiết lập nên chương trình, từ những file .txt đến những File hình ảnh, âm thanh v.v... đều lấy "shortcut" của các chương trình khác cả! Như vậy, cái được gọi là logic là phải "ký sinh" mới làm cho chương trình nhẹ hơn, chạy nhanh hơn, chứ không phải 1 File mà ôm tất cả những cái đó, nếu bạn là lập trình viên, bạn sẽ thấy điều đó là hợp lý hơn, khoa học hơn là bạn dùng trọn gói phải không bạn??? Tuy nhiên, mọi sự rất sáng tạo, phải ghi nhận lại những cái các bạn đã làm.
Thanks all.
 
Msg bõ tiếng việt dễ mà!!

Tôi xin giải thích thêm 1 chút nữa: nói ký sinh nghĩa là tiếng Việt phải được gõ vào 1 cell hoặc đặt vào 1 name hoặc đặt vào 1 file .txt trên dĩa ... nói chung là những trường hợp không thể gõ trực tiếp trong cửa sổ VBE.


chẳng lẽ mìnhlàm sai!!minh test nhiều mấy òi đều được
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    130.2 KB · Đọc: 394
Cho em hỏi thêm là.Khi em muốn cái Msg của em nó có 2 hàng,3 hàng,chứ không phải một hàng dai nhưu thế này thì phải lam sao nữa ah.
 
Muốn xuống hàng bạn dùng Chr(10)
Ví dụ:
PHP:
Sub XuongHang()
MsgBox "hang 1" & Chr(10) & "hang 2"
End Sub
 
cái nay có thể áp dung cho option button, combo box.... ko
 
Dùng hàm msgboxuni là được chứ gì, chút xíu mình post code lên cho
Chỉ có cái nhược điểm là tiêu đề không tiếng việt được
 

File đính kèm

  • msgbox.xls
    30 KB · Đọc: 146
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom