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

Liên hệ QC

Người dùng đang xem chủ đề này

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
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
 

File đính kèm

Mã:
Private Sub CommandButton2_Click()
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,2)")
End Sub
anhtuan1066 có nhiều chiêu quá hay. Không ngờ nó lại đơn giản đến thế !
Hạn chế của nó là phải đưa chuỗi ("MsgText") vào bằng name, đối số 1,2,3 phải nhập trực tiếp. Không thể thay bằng các biến được.
 
Mã:
Private Sub CommandButton2_Click()
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,2)")
End Sub
anhtuan1066 có nhiều chiêu quá hay. Không ngờ nó lại đơn giản đến thế !
Hạn chế của nó là phải đưa chuỗi ("MsgText") vào bằng name, đối số 1,2,3 phải nhập trực tiếp. Không thể thay bằng các biến được.
Thay dc chứ anh!
Ví dụ:
PHP:
Private Sub CommandButton2_Click()
  Dim i As Long
  For i = 1 To 3
    Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """," & i & " )")
  Next i
End Sub
 
Thay dc chứ anh!
Ví dụ:
PHP:
Private Sub CommandButton2_Click()
  Dim i As Long
  For i = 1 To 3
    Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """," & i & " )")
  Next i
End Sub
Cứ quen dấu phẩy trong MsgBox VBA, không để ý nó là chuỗi !
 
Thêm 1 MsgBox tiếng Việt Unicode đơn giản nữa đây! Thậm chí còn đơn giản hơn cái trên, ai nhìn thấy cũng có thể làm đc ngay (chỉ là VẼ và VIẾT)
Ở đây dùng DialogSheet
Code chỉ có vầy:
PHP:
Sub ShowMsgBox()
  DialogSheets("MsgBox").Show
End Sub
Xem file!
MsgBox này còn "ăn tiền" ở chổ: Bạn muốn cho nó nằm ở vị trí nào thì nó sẽ nằm vị trí đấy! (trong khi với MsgBox thông thường là điều không dể dàng tí nào)
 

File đính kèm

Thêm 1 MsgBox tiếng Việt Unicode đơn giản nữa đây! Thậm chí còn đơn giản hơn cái trên, ai nhìn thấy cũng có thể làm đc ngay (chỉ là VẼ và VIẾT)
Ở đây dùng DialogSheet
Code chỉ có vầy:
PHP:
Sub ShowMsgBox()
  DialogSheets("MsgBox").Show
End Sub
Xem file!
MsgBox này còn "ăn tiền" ở chổ: Bạn muốn cho nó nằm ở vị trí nào thì nó sẽ nằm vị trí đấy! (trong khi với MsgBox thông thường là điều không dể dàng tí nào)

Cách này rất hay, mình muốn vận dụng luôn để làm chương trình nhưng chưa làm được vì mình đang mắc một số vấn đề sau:
1. Mình muốn "MsgBox" có thêm nút Cancel, việc tạo thêm nút thì thì mình làm được nhưng làm thế nào để máy hiểu được mình chọn nút này (mục đích là khi ta chọn cancel thì exit sub).
2. Có thể tạo nhiều "MsgBox" (Msg1, Msg2, Msg3...) trong DialogSheets("MsgBox") không? nếu được thì câu lệnh gọi Msg... như thế nào? (tôi đã làm thử bằng cách copy ra nhiều Msg cái nhưng nó chỉ hiện được 1 Msg gốc) hay là mỗi Msg phải làm riêng 1 DialogSheets?.
Thanks!
 
Cách này rất hay, mình muốn vận dụng luôn để làm chương trình nhưng chưa làm được vì mình đang mắc một số vấn đề sau:
1. Mình muốn "MsgBox" có thêm nút Cancel, việc tạo thêm nút thì thì mình làm được nhưng làm thế nào để máy hiểu được mình chọn nút này (mục đích là khi ta chọn cancel thì exit sub).!
Anh muốn tạo thêm bao nhiêu nút hay ComboBox, ListBox gì gì đó cũng ko có vấn đề. Cách dùng vẩn như khi anh dùng các Object trên thanh Form thôi, nghĩa là khi anh muốn Object nào làm việc gì thì viết cho nó 1 Sub, tiếp theo Assign macro object cho sub là xong!
Trường hợp anh muốn khi bấm nút OK thì làm 1 việc, còn Cancel thì ko làm gì cả. Vậy anh xem file đính kèm dưới đây (Gán nút OK cho 1 sub, còn Cancel thi ko cần, anh bấm vào nó sẽ thoát Form ngay)
2. Có thể tạo nhiều "MsgBox" (Msg1, Msg2, Msg3...) trong DialogSheets("MsgBox") không? nếu được thì câu lệnh gọi Msg... như thế nào? (tôi đã làm thử bằng cách copy ra nhiều Msg cái nhưng nó chỉ hiện được 1 Msg gốc) hay là mỗi Msg phải làm riêng 1 DialogSheets?.
Thanks!
Theo chổ em biết thì không thể... Nếu muốn bao nhiêu MsgBox, anh Insert bấy nhiêu Dialog sheet (click phải sheet tab, chọn Insert)
Thật ra cái em đang làm ở file trên, nêu nói nó là MsgBox cũng không đúng... chỉ là giả lập MsgBox mà thôi. Đúng ra anh phải xem mổi 1 Dialog sheet như 1 UserForm thì chính xác hơn (mổi Dialog sheet có thể chèn rất nhiều Object)
Với những ai cần 1 UserForm với các tính năng đơn giản thì DialogSheet là lựa chọn khá thích hợp (vẽ vời đơn giản, không đòi hỏi cao cấp, viết code khá dể dàng)
 

File đính kèm

Lần chỉnh sửa cuối:
Với cách này ta có thể lợi dụng để làm Form với giao diện được cải thiện hoàn toàn so với VBA và 1 điểm nữa đó là có thể đặt ký tự truy cập nhanh (Accelerator Key) cho các control nhưng lại gặp phải vấn đề về xử lý các sự kiện. Nan giải thật.
 
Với cách này ta có thể lợi dụng để làm Form với giao diện được cải thiện hoàn toàn so với VBA và 1 điểm nữa đó là có thể đặt ký tự truy cập nhanh (Accelerator Key) cho các control nhưng lại gặp phải vấn đề về xử lý các sự kiện. Nan giải thật.
Được cái này mất cái kia mà!
Bạn có thể cho 1 ví dụ về khó khăn khi xử lý các sự kiện được không? Biết đâu có cách!
 
Tôi vừa thử nhưng không biết là làm thế nào để xuất hiện các sự kiện, thí dụ như mouse_up, down, move rồi việc truy xuất thông tin trên các control, quản lý control...
Đơn giản như tạo 1 form nhập liệu gồm 1 textbox và 1 button, khi click vào button thì sẽ gán giá trị của textbox vào cells(1,1) mà tôi cũng chẳng biết phải làm thế nào.
 
Tôi vừa thử nhưng không biết là làm thế nào để xuất hiện các sự kiện, thí dụ như mouse_up, down, move rồi việc truy xuất thông tin trên các control, quản lý control...
Đơn giản như tạo 1 form nhập liệu gồm 1 textbox và 1 button, khi click vào button thì sẽ gán giá trị của textbox vào cells(1,1) mà tôi cũng chẳng biết phải làm thế nào.
Bạn tham khảo thử trang này:
http://www.mrexcel.com/forum/showthread.php?t=390035
Thấy cũng hay đấy (có 1 ví dụ)
 
Ồ, hay đấy, có lẽ lại phải nghiên cứu về mảng này xem thế nào. Không ngờ nó lại quản lý control theo dạng mảng, như kiểu VB6, hình như thằng này nó lấy control chuẩn của windows thì phải.
 
Hỏi thêm

Em sử dụng đoạn code
Mã:
Private Sub CommandButton2_Click()
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,1)")
End Sub
và thu được MsgBox có hình như sau
vidu1.jpg

Các bác hướng dẫn em bằng cách nào để:
- Thay title của cái bảng trên
- Khi bấm vào OK thì nó làm tiếp việc khác.
 
Lần chỉnh sửa cuối:
Em sử dụng đoạn code
Mã:
Private Sub CommandButton2_Click()
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,1)")
End Sub
và thu được MsgBox có hình như sau
vidu1.jpg

Các bác hướng dẫn em bằng cách nào để:
- Thay title của cái bảng trên
- Khi bấm vào OK thì nó làm tiếp việc khác.
Đoạn code này
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,1)")
sẽ trả về giá trị = TRUE nếu bạn bấm OKFALSE nếu bạn bấm Cancel ---> Từ đây bạn biết phải làm gì rồi chứ
Ví dụ:
PHP:
If Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("MsgText") & """,1)") then
  '... Làm gì đó...
Else
 '... Làm cái khác
End If
Còn tiêu đề của Msg thì hình như không có cách thay đổi
 
msgbox tiếng việt đơn giản nhất đây!!!

Chào các bác !!!! mình đã làm được Msgbox VBA thông báo bằng tiếng việt thật đơ giản !!!đây
Các bác nhớ chỉ chỉnh ở ngoài win XP thui thì trong vba sẽ hỗ trợ ra tiếng việt thôi!!!

Cách chỉnh trong win đây
Cài đặt hệ điều hành 2K/XP

Vào Control panel->Regional and Language Options. Trong bảng này có 3 tab:

+ Tab Regional options (gọi là Tab 1)

+ Tab Languages (gọi là Tab 2)

+ Tab Advanced (gọi là Tab 3)

- Đầu tiên bạn vào Tab 2, đánh dấu chọn "Install files for complex script and right-to-left languages (including Thai)" (nếu chưa chọn). Có thể chương trình yêu cầu bạn đưa vào đĩa cài đặt WinXP(2K). Lưu ý: không nên dùng các đĩa cài đặt XP đã được chỉnh sửa như Wesmosiss WinXP,...

- Chọn OK và khởi động lại máy.

- Vào lại Tab 1, chọn Vietnamese.

- Vào Tab 3, chọn Vietnamese.

- Chọn OK và khởi động lại máy.

Cài đặt MS Office

Sau khi đã cài đặt MS Office, bạn vào Start -> Programs -> Microsoft Office Tools -> Microsoft Office Language Settings, chọn ngôn ngữ mặc định là Vietname.
chúc các bác thành công!!!
xin lỗi các bác!!Mình ko biết post hình lên diễn đàn!!!
có gì đt 0983304958 hay gời mail quan314k@yahoo.com mình chỉ tận tình!!!hiiiiiiiiiiiiiii
 
Lần chỉnh sửa cuối:
Chào các bác !!!! mình đã làm được Msgbox VBA thông báo bằng tiếng việt thật đơ giản !!!đây
Các bác nhớ chỉ chỉnh ở ngoài win XP thui thì trong vba sẽ hỗ trợ ra tiếng việt thôi!!!

Trước tiên, cám ơn BÁC! Trong trường hợp của Bác là Win2K/XP, thế nhưng đối với Vista hoặc Win7 thì sao? (Tôi chưa dám thử vì ngại lỗi chương trình) Bác có cao kiến gì không?
Riêng tôi thì vẫn phải chọn code MsgUni (hình như của Thầy TUÂN UNI), bởi vì qua máy bất kỳ cũng chạy được tiếng Việt, còn cách của bạn, có thể chỉ tốt cho máy của tôi.

Cũng xin hỏi, có ai đã làm như cách của quan314k chưa? Và có kinh nghiệm gì không?
 
Lần chỉnh sửa cuối:
Trước tiên, cám ơn BÁC! Trong trường hợp của Bác là Win2K/XP, thế nhưng đối với Vista hoặc Win7 thì sao? (Tôi chưa dám thử vì ngại lỗi chương trình) Bác có cao kiến gì không?
Riêng tôi thì vẫn phải chọn code MsgUni (hình như của Thầy TUÂN UNI), bởi vì qua máy bất kỳ cũng chạy được tiếng Việt, còn cách của bạn, có thể chỉ tốt cho máy của tôi.

Cũng xin hỏi, có ai đã làm như cách của quan314k chưa? Và có kinh nghiệm gì không?


Tôi cũng đã thử cách của quan314k , và thực hiện như sau:
Máy tôi dùng UNIKEY
- Kiểu gõ : VNI
- Bảng mã : Unicode tổ hợp
Có nhận xét là khi đánh chữ trong MsgBox con trỏ chuột chạy khá xa so với các chữ đang đánh không nằm kế chữ đang đánh. Nên đánh câu mới dễ hơn là sửa những câu cũ.
Không biết quan314k có hướng dẫn thêm gì không?
 
Tôi cũng đã thử cách của quan314k , và thực hiện như sau:
Máy tôi dùng UNIKEY
- Kiểu gõ : VNI
- Bảng mã : Unicode tổ hợp
Có nhận xét là khi đánh chữ trong MsgBox con trỏ chuột chạy khá xa so với các chữ đang đánh không nằm kế chữ đang đánh. Nên đánh câu mới dễ hơn là sửa những câu cũ.
Không biết quan314k có hướng dẫn thêm gì không?

icon7.gif
msgbox tiếng việt đơn giản nhất đây!!!
Chào các bác !!!! mình đã làm được Msgbox VBA thông báo bằng tiếng việt thật đơ giản !!!đây
Các bác nhớ chỉ chỉnh ở ngoài win XP thui thì trong vba sẽ hỗ trợ ra tiếng việt thôi!!!

Cách chỉnh trong win đây
Cài đặt hệ điều hành 2K/XP

Vào Control panel->Regional and Language Options. Trong bảng này có 3 tab:

+ Tab Regional options (gọi là Tab 1)

+ Tab Languages (gọi là Tab 2)

+ Tab Advanced (gọi là Tab 3)

- Đầu tiên bạn vào Tab 2, đánh dấu chọn "Install files for complex script and right-to-left languages (including Thai)" (nếu chưa chọn). Có thể chương trình yêu cầu bạn đưa vào đĩa cài đặt WinXP(2K). Lưu ý: không nên dùng các đĩa cài đặt XP đã được chỉnh sửa như Wesmosiss WinXP,...

- Chọn OK và khởi động lại máy.

- Vào lại Tab 1, chọn Vietnamese.

- Vào Tab 3, chọn Vietnamese.

- Chọn OK và khởi động lại máy.

Cài đặt MS Office

Sau khi đã cài đặt MS Office, bạn vào Start -> Programs -> Microsoft Office Tools -> Microsoft Office Language Settings, chọn ngôn ngữ mặc định là Vietname.
chúc các bác thành công!!!
có gì đt 0983304958 hay gời mail quan314k@yahoo.com mình chỉ tận tình!!!hiiiiiiiiiiiiiii

gởi các bác xem file mình làm nhe!!!! win XP/vista/2000/windơw 7đều đươc cả các bác!!!!!!!!!!! chép qua máy tính khác định như trên là vẫn hiện ra Msgbox tiếng việt hà!!!!
 

File đính kèm

  • untitled1111.JPG
    untitled1111.JPG
    167.8 KB · Đọc: 104
  • untitled.JPG
    untitled.JPG
    166.1 KB · Đọc: 130
  • untitled1.JPG
    untitled1.JPG
    129.4 KB · Đọc: 110
  • untitled11.JPG
    untitled11.JPG
    168.3 KB · Đọc: 74
Lần chỉnh sửa cuối:
các anh ơi gõ chữ trong msgbox ở chỗ nào vậy?
 
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!
 
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

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: 395
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

Lần chỉnh sửa cuối:
Coi thử đi
Chỉ có cái nhược diểm là tiêu dề không tiếng việt được
 
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

Hàm MsgBoxUni do tôi lập trình ra, bạn copy được ở đâu đó nên không hiểu rõ bản chất của chuỗi unicode.

Hàm MsgBoxUni được lập trình sử dụng hàm API MessageBoxW của user32.dll của Windows. Đây là hàm chuẩn theo unicode dùng chung cho các ứng dụng Windows. Title không không lên tiếng Việt chỉ xảy ra với Windows XP vì font trên Title/Caption của Form không phả là font unicode. Muốn hiện đúng chuỗi unicode thì font chọn trong Control Panel là: tahoma; veranda; Time New Roman.

Hình ảnh dưới đây được chụp trên Windows Vista

image001.jpg


Bài viết gốc kèm theo mã nguồn hàm MsgBoxUni của tác giả Nguyễn Duy Tuân tại địa chỉ dưới đây:

 
Lần chỉnh sửa cuối:
Cảm ơn Nguyễn Duy Tuân đã chia sẻ về hàm MsgBoxUni

em có áp dụng hàm này của bác một thời gian dài từ win 7, win 8 đều thể hiện tốt, nhưng khi sang dùng Windows 10 Pro thì không còn đúng

ví dụ: gõ "Đã đăng nhập" và "Thời gian thử việc ..."

da dang nhap.png thu viec.png

không biết có còn chỉnh sửa gì trong code hay hệ thống nữa ko?
 
Lần chỉnh sửa cuối:
Làm sao để thay đổi Caption mặc định của hộp thông báo là "Microsoft Excel" bằng phương thức Application.ExecuteExcel14Macro vậy anh?
 
Làm sao để thay đổi Caption mặc định của hộp thông báo là "Microsoft Excel" bằng phương thức Application.ExecuteExcel14Macro vậy anh?
Xin lỗi bạn, trong đây nhiều ANH lắm, hỏng biết bạn hỏi anh nào vậy?

Nếu có hỏi liên quan đến bài nào thì nên trích dẫn bài đó nha bạn!
 
Cảm ơn Nguyễn Duy Tuân đã chia sẻ về hàm MsgBoxUni

em có áp dụng hàm này của bác một thời gian dài từ win 7, win 8 đều thể hiện tốt, nhưng khi sang dùng Windows 10 Pro thì không còn đúng

ví dụ: gõ "Đã đăng nhập" và "Thời gian thử việc ..."

View attachment 147011 View attachment 147014

không biết có còn chỉnh sửa gì trong code hay hệ thống nữa ko?
Mình thấy dùng bản mã Unicode tổ hợp thì hộp thông báo hiển thị được tiếng Việt, nhưng có vấn đề là khi gõ tiếng Việt trong code thì vị trí con trỏ không chính xác với vị trí của chữ, mỗi lần gõ chữ có dấu thì con trỏ nhảy thêm 1 bước gây khó khăn khi chỉnh sửa.
 

File đính kèm

Mình thấy dùng bản mã Unicode tổ hợp thì hộp thông báo hiển thị được tiếng Việt, nhưng có vấn đề là khi gõ tiếng Việt trong code thì vị trí con trỏ không chính xác với vị trí của chữ, mỗi lần gõ chữ có dấu thì con trỏ nhảy thêm 1 bước gây khó khăn khi chỉnh sửa.

Sao không dùng bảng mã Unicode dựng sẳn đi bạn? Unicode tổ hợp khá rắc rối khi ghi trên caption của các control hoặc đối tượng.
 
Sao không dùng bảng mã Unicode dựng sẳn đi bạn? Unicode tổ hợp khá rắc rối khi ghi trên caption của các control hoặc đối tượng.

Không biết ở máy bạn thế nào nhưng mình thấy ở máy mình chỉ Unicode tổ hợp mới gõ được tiếng Việt trong code nếu không dùng hàm chuyển đổi ( mình dùng excel2013)
 
Lần chỉnh sửa cuối:
Không biết ở máy bạn thế nào nhưng mình thấy ở máy mình chỉ Unicode tổ hợp mới gõ được tiếng Việt trong code nếu không dùng hàm chuyển đổi ( mình dùng excel2013)
Vì bạn muốn gõ tiếng Việt trong VBA (cái thứ mà người dùng chẳng cần thấy) nên MsgBox bị lỗi font (cái hiển thị bị lỗi), vậy bạn muốn chọn cái nào thì tùy. Riêng gõ tiếng Việt trong đó thì font VNI-Times cũng gõ thấy vậy đâu nhất thiết phải Unicode Tổ hợp.

Tôi thì luôn chọn Unicode dựng sẳn thôi. Muốn có tiếng Việt thì tôi gõ ở sheet nào đó rồi gọi nó vào thôi.
 
Vì bạn muốn gõ tiếng Việt trong VBA (cái thứ mà người dùng chẳng cần thấy) nên MsgBox bị lỗi font (cái hiển thị bị lỗi), vậy bạn muốn chọn cái nào thì tùy. Riêng gõ tiếng Việt trong đó thì font VNI-Times cũng gõ thấy vậy đâu nhất thiết phải Unicode Tổ hợp.

Tôi thì luôn chọn Unicode dựng sẳn thôi. Muốn có tiếng Việt thì tôi gõ ở sheet nào đó rồi gọi nó vào thôi.
Mình cũng chỉ thích dùng Unicode dựng sẵn cho tiện, nhưng khi gọi vào MsgBox toàn bị lỗi font ( kiểu gõ telex).
Trong file gửi kèm đây mình dùng Msgbox hiển thị 3 câu ở 3 ô khác nhau thì chỉ có câu gõ bằng Unicode tổ hợp là không bị lỗi font. Mình không hiểu nguyên nhân tại sao, bạn xem qua rồi giải thích giúp với (sorry, gọi là "bạn" vì chưa biết tuổi ||||| )
 

File đính kèm

Mình cũng chỉ thích dùng Unicode dựng sẵn cho tiện, nhưng khi gọi vào MsgBox toàn bị lỗi font ( kiểu gõ telex).
Trong file gửi kèm đây mình dùng Msgbox hiển thị 3 câu ở 3 ô khác nhau thì chỉ có câu gõ bằng Unicode tổ hợp là không bị lỗi font. Mình không hiểu nguyên nhân tại sao, bạn xem qua rồi giải thích giúp với (sorry, gọi là "bạn" vì chưa biết tuổi ||||| )
Sao không dùng kiểu sau đi cho nó khỏe thân vậy...
PHP:
Sub Test_MsgboxUnicode()
Dim CH As String, Dl As String
CH = "C" & ChrW(7897) & "ng h" & ChrW(242) & "a x" & ChrW(227) & " h" & ChrW(7897) _& "i ch" & ChrW(7911) & " ngh" & ChrW(297) & "a vi" & ChrW(7879) & "t Nam"
Dl = ChrW(272) & ChrW(7897) & "c L" & ChrW(7853) & "p - T" & ChrW(432) & " Do - H" _& ChrW(7841) & "nh Ph" & ChrW(250) & "c"
CreateObject("WScript.Shell").PopUp CH & vbNewLine & Dl, , "Thông Báo"
End Sub
 
Mình cũng chỉ thích dùng Unicode dựng sẵn cho tiện, nhưng khi gọi vào MsgBox toàn bị lỗi font ( kiểu gõ telex).
Trong file gửi kèm đây mình dùng Msgbox hiển thị 3 câu ở 3 ô khác nhau thì chỉ có câu gõ bằng Unicode tổ hợp là không bị lỗi font. Mình không hiểu nguyên nhân tại sao, bạn xem qua rồi giải thích giúp với (sorry, gọi là "bạn" vì chưa biết tuổi ||||| )
Hiển thị tiếng Việt ư? Quá đơn giản!

Mã:
Sub Test()
    Dim MyMsg As Long
    Dim MsgTitle As String, MsgText As String
    MsgTitle = Sheet1.Range("B1").Value & vbLf & Sheet1.Range("B2").Value & vbLf
    MsgText = Sheet1.Range("B3").Value & vbLf & vbLf & Sheet1.Range("B4").Value & vbLf
    MyMsg = Application.Assistant.DoAlert(MsgTitle, MsgText, msoAlertButtonYesNo, _
          msoAlertIconQuery, msoAlertDefaultFirst, msoAlertCancelDefault, False)
End Sub
 

File đính kèm

thank các anh đẹp trai |||||||||||||||
 
Anh ơi, cái này để chạy tiếp lệnh khác nếu chọn Yes hoặc No thì làm như thế nào ạ.

Hiển thị tiếng Việt ư? Quá đơn giản!

Mã:
Sub Test()
    Dim MyMsg As Long
    Dim MsgTitle As String, MsgText As String
    MsgTitle = Sheet1.Range("B1").Value & vbLf & Sheet1.Range("B2").Value & vbLf
    MsgText = Sheet1.Range("B3").Value & vbLf & vbLf & Sheet1.Range("B4").Value & vbLf
    MyMsg = Application.Assistant.DoAlert(MsgTitle, MsgText, msoAlertButtonYesNo, _
          msoAlertIconQuery, msoAlertDefaultFirst, msoAlertCancelDefault, False)
End Sub
 
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
Các bạn giúp mình với ạ. Mình muốn ra Yes, No thì thay số 1,2,3 chọn số nào để ra mình đã thử từ 1 đến 3 mà không ra Yes, No. Mong các bạn giúp đỡ mình với ạ
 
Các bạn giúp mình với ạ. Mình muốn ra Yes, No thì thay số 1,2,3 chọn số nào để ra mình đã thử từ 1 đến 3 mà không ra Yes, No. Mong các bạn giúp đỡ mình với ạ
Sao không dùng bài #52? Ai đó dí súng vào đầu bắt dùng cách "này" à?
 
Hàm MsgBoxUni do tôi lập trình ra, bạn copy được ở đâu đó nên không hiểu rõ bản chất của chuỗi unicode.

Hàm MsgBoxUni được lập trình sử dụng hàm API MessageBoxW của user32.dll của Windows. Đây là hàm chuẩn theo unicode dùng chung cho các ứng dụng Windows. Title không không lên tiếng Việt chỉ xảy ra với Windows XP vì font trên Title/Caption của Form không phả là font unicode. Muốn hiện đúng chuỗi unicode thì font chọn trong Control Panel là: tahoma; veranda; Time New Roman.

Hình ảnh dưới đây được chụp trên Windows Vista

image001.jpg


Bài viết gốc kèm theo mã nguồn hàm MsgBoxUni của tác giả Nguyễn Duy Tuân tại địa chỉ dưới đây:

Sử dụng hàm này, nếu lựa chọn là Yes/No; nếu chọn Yes thì thực hiện lệnh A, thì phải làm sao bạn nhỉ?
 

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

Back
Top Bottom