Đá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
  Code VBA không chạy trong access 2016 tranthanhan1962 5 230 15-11-17, 03:47 PM
Bài mới nhất: tranthanhan1962
  Câu lệnh nào ẩn button trong form? William 3 241 15-11-17, 11:30 AM
Bài mới nhất: cpucloi
Photo Thiết kế combobox chứa giới tính trong Access binhpc 4 179 09-11-17, 03:05 PM
Bài mới nhất: ongke0711
  coppy dữ liệu giữa 2 subform trong 1 form doandiepanh 3 138 24-10-17, 03:07 PM
Bài mới nhất: tranthanhan1962
  [Help] 2 subform trong mainform pvhung76 7 278 18-10-17, 11:48 PM
Bài mới nhất: tranthanhan1962

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ơ