Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Giải pháp để tạo Msgbox tiếng việt trong VBA
#1
Chào mọi người,

- Trong thời gian qua, mình có nhu cầu tạo một msgbox tiếng việt, nhưng các kiến thức tìm thấy trên mạng phức tạp quá so với trình độ của mình. Hôm nay mình xin chia sẽ kinh nghiệm về việc tạo một msgbox tiếng việt mà mình mới phát hiện ra. Nếu bạn nào có cách hay hơn hoặc trùng ý tưởng xin đừng cười nha.
- Vấn đề chính nằm ở bảng mã tiếng việt, mình nhận thấy trong VBA không dịch được tiếng việt nếu sử dụng bảng mã Unicode. Đối với bảng mã VNI-Window thì hiểu rất tốt. Nhưng nếu sử dụng VNI-Window thì buộc phải chỉnh lại font trong hệ thống.
- Giải pháp = mời các bạn tham khảo bên dưới, hiệu quả 99%.

Bước 1: Tạo một module, copy hai công thức bên dưới vào

Mã:
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function MessageBoxW Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Function MsgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult
  
   'Function MsgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant, Optional HelpFile, Optional Context) As VbMsgBoxResult
   'BStrMsg,BStrTitle : La chuoi Unicode
   Dim BStrMsg, BStrTitle
   'Hàm StrConv Chuyen chuoi ve ma Unicode
   BStrMsg = StrConv(PromptUni, vbUnicode)
   BStrTitle = StrConv(TitleUni, vbUnicode)
   MsgBoxUni = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons)

End Function

Function VNItoUNICODE(vnstr As String)

   Dim C As String, i As Integer
   Dim db As Boolean
   For i = 1 To Len(vnstr)
      db = False
      If i < Len(vnstr) Then
         C = Mid(vnstr, i + 1, 1)
        If C = "ù" Or C = "ø" Or C = "û" Or C = "õ" Or C = "ï" Or _
        C = "ê" Or C = "é" Or C = "è" Or C = "ú" Or C = "ü" Or C = "ë" Or _
        C = "â" Or C = "á" Or C = "à" Or C = "å" Or C = "ã" Or C = "ä" Or _
        C = "Ù" Or C = "Ø" Or C = "Û" Or C = "Õ" Or C = "Ï" Or _
        C = "Ê" Or C = "É" Or C = "È" Or C = "Ú" Or C = "Ü" Or C = "Ë" Or _
        C = "Â" Or C = "Á" Or C = "À" Or C = "Å" Or C = "Ã" Or C = "Ä" Then db = True
      End If
      If db Then
         C = Mid(vnstr, i, 2)
         Select Case C
         Case "aù": C = ChrW$(225)
         Case "aø": C = ChrW$(224)
         Case "aû": C = ChrW$(7843)
         Case "aõ": C = ChrW$(227)
         Case "aï": C = ChrW$(7841)
         Case "aê": C = ChrW$(259)
         Case "aé": C = ChrW$(7855)
         Case "aè": C = ChrW$(7857)
         Case "aú": C = ChrW$(7859)
         Case "aü": C = ChrW$(7861)
         Case "aë": C = ChrW$(7863)
         Case "aâ": C = ChrW$(226)
         Case "aá": C = ChrW$(7845)
         Case "aà": C = ChrW$(7847)
         Case "aå": C = ChrW$(7849)
         Case "aã": C = ChrW$(7851)
         Case "aä": C = ChrW$(7853)
         Case "eù": C = ChrW$(233)
         Case "eø": C = ChrW$(232)
         Case "eû": C = ChrW$(7867)
         Case "eõ": C = ChrW$(7869)
         Case "eï": C = ChrW$(7865)
         Case "eâ": C = ChrW$(234)
         Case "eá": C = ChrW$(7871)
         Case "eà": C = ChrW$(7873)
         Case "eå": C = ChrW$(7875)
         Case "eã": C = ChrW$(7877)
         Case "eä": C = ChrW$(7879)
         Case "où": C = ChrW$(243)
         Case "oø": C = ChrW$(242)
         Case "oû": C = ChrW$(7887)
         Case "oõ": C = ChrW$(245)
         Case "oï": C = ChrW$(7885)
         Case "oâ": C = ChrW$(244)
         Case "oá": C = ChrW$(7889)
         Case "oà": C = ChrW$(7891)
         Case "oå": C = ChrW$(7893)
         Case "oã": C = ChrW$(7895)
         Case "oä": C = ChrW$(7897)
         Case "ôù": C = ChrW$(7899)
         Case "ôø": C = ChrW$(7901)
         Case "ôû": C = ChrW$(7903)
         Case "ôõ": C = ChrW$(7905)
         Case "ôï": C = ChrW$(7907)
         Case "uù": C = ChrW$(250)
         Case "uø": C = ChrW$(249)
         Case "uû": C = ChrW$(7911)
         Case "uõ": C = ChrW$(361)
         Case "uï": C = ChrW$(7909)
         Case "öù": C = ChrW$(7913)
         Case "öø": C = ChrW$(7915)
         Case "öû": C = ChrW$(7917)
         Case "öõ": C = ChrW$(7919)
         Case "öï": C = ChrW$(7921)
         Case "yù": C = ChrW$(253)
         Case "yø": C = ChrW$(7923)
         Case "yû": C = ChrW$(7927)
         Case "yõ": C = ChrW$(7929)
         Case "AÙ": C = ChrW$(193)
         Case "AØ": C = ChrW$(192)
         Case "AÛ": C = ChrW$(7842)
         Case "AÕ": C = ChrW$(195)
         Case "AÏ": C = ChrW$(7840)
         Case "AÊ": C = ChrW$(258)
         Case "AÉ": C = ChrW$(7854)
         Case "AÈ": C = ChrW$(7856)
         Case "AÚ": C = ChrW$(7858)
         Case "AÜ": C = ChrW$(7860)
         Case "AË": C = ChrW$(7862)
         Case "AÂ": C = ChrW$(194)
         Case "AÁ": C = ChrW$(7844)
         Case "AÀ": C = ChrW$(7846)
         Case "AÅ": C = ChrW$(7848)
         Case "AÃ": C = ChrW$(7850)
         Case "AÄ": C = ChrW$(7852)
         Case "EÙ": C = ChrW$(201)
         Case "EØ": C = ChrW$(200)
         Case "EÛ": C = ChrW$(7866)
         Case "EÕ": C = ChrW$(7868)
         Case "EÏ": C = ChrW$(7864)
         Case "EÂ": C = ChrW$(202)
         Case "EÁ": C = ChrW$(7870)
         Case "EÀ": C = ChrW$(7872)
         Case "EÅ": C = ChrW$(7874)
         Case "EÃ": C = ChrW$(7876)
         Case "EÄ": C = ChrW$(7878)
         Case "OÙ": C = ChrW$(211)
         Case "OØ": C = ChrW$(210)
         Case "OÛ": C = ChrW$(7886)
         Case "OÕ": C = ChrW$(213)
         Case "OÏ": C = ChrW$(7884)
         Case "OÂ": C = ChrW$(212)
         Case "OÁ": C = ChrW$(7888)
         Case "OÀ": C = ChrW$(7890)
         Case "OÅ": C = ChrW$(7892)
         Case "OÃ": C = ChrW$(7894)
         Case "OÄ": C = ChrW$(7896)
         Case "ÔÙ": C = ChrW$(7898)
         Case "ÔØ": C = ChrW$(7900)
         Case "ÔÛ": C = ChrW$(7902)
         Case "ÔÕ": C = ChrW$(7904)
         Case "ÔÏ": C = ChrW$(7906)
         Case "UÙ": C = ChrW$(218)
         Case "UØ": C = ChrW$(217)
         Case "UÛ": C = ChrW$(7910)
         Case "UÕ": C = ChrW$(360)
         Case "UÏ": C = ChrW$(7908)
         Case "ÖÙ": C = ChrW$(7912)
         Case "ÖØ": C = ChrW$(7914)
         Case "ÖÛ": C = ChrW$(7916)
         Case "ÖÕ": C = ChrW$(7918)
         Case "ÖÏ": C = ChrW$(7920)
         Case "YÙ": C = ChrW$(221)
         Case "YØ": C = ChrW$(7922)
         Case "YÛ": C = ChrW$(7926)
         Case "YÕ": C = ChrW$(7928)
         End Select
      Else
         C = Mid(vnstr, i, 1)
         Select Case C
         Case "ô": C = ChrW$(417)
         Case "í": C = ChrW$(237)
         Case "ì": C = ChrW$(236)
         Case "æ": C = ChrW$(7881)
         Case "ó": C = ChrW$(297)
         Case "ò": C = ChrW$(7883)
         Case "ö": C = ChrW$(432)
         Case "î": C = ChrW$(7925)
         Case "ñ": C = ChrW$(273)
         Case "Ô": C = ChrW$(416)
         Case "Í": C = ChrW$(205)
         Case "Ì": C = ChrW$(204)
         Case "Æ": C = ChrW$(7880)
         Case "Ó": C = ChrW$(296)
         Case "Ò": C = ChrW$(7882)
         Case "Ö": C = ChrW$(431)
         Case "Î": C = ChrW$(7924)
         Case "Ñ": C = ChrW$(272)
         End Select
      End If
      VNItoUNICODE = VNItoUNICODE + C
      If db Then i = i + 1
   Next i
  
End Function

Bước 2: Khi cần sử dụng thì tương tự như sau

Mã:
Dim TIEU_DE, THONG_BAO as string

THONG_BAO = VNItoUNICODE("Baïn khoâng ñöôïc ñeå troáng ")
TIEU_DE = VNItoUNICODE("Thoâng baùo")

MsgBoxUni THONG_BAO , vbOKOnly + vbInformation, TIEU_DE
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#2
1/ Lưu ý bạn dinh_trong_hoa : Nên đưa nguồn trích dẫn vào bài viết
2/ Hàm của bạn thiếu một hàm API cơ bản, đó là hàm MessageBoxW. Nếu thiếu định nghĩa hàm API này, chương trình sẽ báo lỗi ngay
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(11-08-14, 08:54 PM)Xuân Thanh Đã viết: 1/ Lưu ý bạn dinh_trong_hoa : Nên đưa nguồn trích dẫn vào bài viết
2/ Hàm của bạn thiếu một hàm API cơ bản, đó là hàm MessageBoxW. Nếu thiếu định nghĩa hàm API này, chương trình sẽ báo lỗi ngay
Thân mến

Dear Xuân Thanh,

Mình chưa hiểu ý bạn, nếu trong bài có thiếu gì nhờ bạn bổ sung giúp.

Thanks
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#4
Bạn đã test thử chưa? Có bị lỗi không?
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
(13-08-14, 03:11 PM)Xuân Thanh Đã viết: Bạn đã test thử chưa? Có bị lỗi không?
Thân mến

Dear Xuân Thanh,

Oh sorry mình hiểu ý bạn rồi, mình copy thiếu

Thanks
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#6
(11-08-14, 08:54 PM)Xuân Thanh Đã viết: 1/ Lưu ý bạn dinh_trong_hoa : Nên đưa nguồn trích dẫn vào bài viết
2/ Hàm của bạn thiếu một hàm API cơ bản, đó là hàm MessageBoxW. Nếu thiếu định nghĩa hàm API này, chương trình sẽ báo lỗi ngay
Thân mến

Bạn vẫn chưa trả lời ý thứ nhất của tôi. Một khi đã sử dụng nguồn từ nơi khác, nên đưa nguồn vào bài viêt để các thành viên dễ tham khảo và để tôn trọng quyền tác giả
Nếu bạn không bổ sung bài viết sẽ đươc move sang nơi khác
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#7
(14-08-14, 11:11 AM)Xuân Thanh Đã viết:
(11-08-14, 08:54 PM)Xuân Thanh Đã viết: 1/ Lưu ý bạn dinh_trong_hoa : Nên đưa nguồn trích dẫn vào bài viết
2/ Hàm của bạn thiếu một hàm API cơ bản, đó là hàm MessageBoxW. Nếu thiếu định nghĩa hàm API này, chương trình sẽ báo lỗi ngay
Thân mến

Bạn vẫn chưa trả lời ý thứ nhất của tôi. Một khi đã sử dụng nguồn từ nơi khác, nên đưa nguồn vào bài viêt để các thành viên dễ tham khảo và để tôn trọng quyền tác giả
Nếu bạn không bổ sung bài viết sẽ đươc move sang nơi khác
Thân mến

Dear Xuân Thanh,

Mình không nhớ lấy từ nguồn nào, mình lang thang trên mạng tìm kiếm theo nhu cầu. Rồi ứng dụng thử, thấy ok nên mới chia sẽ trên diễn đàn.

Thanks
Chữ ký của dinh_trong_hoa
Reply
Những người đã cảm ơn
#8
code của bạn sẽ báo lỗi trong vba7 (tức 64bit). bạn cần điều chỉnh, bổ sung để có thể chạy trên mọi vba ( cả 32b và 64bit).
Chữ ký của letrungnew Xin chào, mình là letrungnew, Tham gia http://thuthuataccess.com/forum từ ngày 24-11 -14.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Giúp đỡ về cách xóa nội dung trong một field nam8384 2 118 17-10-16, 08:43 PM
Bài mới nhất: toancvp
  [Hỏi] Sử dụng chuột giữa trong subform là report. toancvp 10 360 12-10-16, 01:01 AM
Bài mới nhất: toancvp
  Lọc theo điều kiện trong listbox Ranju 3 183 06-10-16, 05:26 PM
Bài mới nhất: Ranju
  Định dạng trong listbox feeling 3 163 06-10-16, 02:44 PM
Bài mới nhất: jeck09nt
  Xin giúp tạo 1 trường trong table đánh số tự động thay cho autonumber trungminh 7 451 16-09-16, 05:17 PM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ