Tại sao Msgbox Uni không hiện tiếng Việt? (1 người xem)

  • Thread starter Thread starter bebeen
  • Ngày gửi Ngày gửi
Liên hệ QC

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

bebeen

Thành viên thường trực
Tham gia
13/2/12
Bài viết
213
Được thích
24
Chào A/C GPE! Em đã tài code này của anh Nguyễn Duy Tuân:
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
Private Declare Function InputBoxW 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
    Dim BStrMsg, BStrTitle
    BStrMsg = StrConv(PromptUni, vbUnicode)
    BStrTitle = StrConv(TitleUni, vbUnicode)
    MsgBoxUni = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons)
End Function


Function TCVN3toUNICODE(vnstr As String)
Dim c As String, i As Integer
   For i = 1 To Len(vnstr)
      c = Mid(vnstr, i, 1)
      Select Case c
         Case "a": c = ChrW$(97)
         Case "¸": c = ChrW$(225)
         Case "µ": c = ChrW$(224)
         Case "¶": c = ChrW$(7843)
         Case "·": c = ChrW$(227)
         Case "¹": c = ChrW$(7841)
         Case "¨": c = ChrW$(259)
         Case "¾": c = ChrW$(7855)
         Case "»": c = ChrW$(7857)
         Case "¼": c = ChrW$(7859)
         Case "½": c = ChrW$(7861)
         Case "Æ": c = ChrW$(7863)
         Case "©": c = ChrW$(226)
         Case "Ê": c = ChrW$(7845)
         Case "Ç": c = ChrW$(7847)
         Case "È": c = ChrW$(7849)
         Case "É": c = ChrW$(7851)
         Case "Ë": c = ChrW$(7853)
         Case "e": c = ChrW$(101)
         Case "Ð": c = ChrW$(233)
         Case "Ì": c = ChrW$(232)
         Case "Î": c = ChrW$(7867)
         Case "Ï": c = ChrW$(7869)
         Case "Ñ": c = ChrW$(7865)
         Case "ª": c = ChrW$(234)
         Case "Õ": c = ChrW$(7871)
         Case "Ò": c = ChrW$(7873)
         Case "Ó": c = ChrW$(7875)
         Case "Ô": c = ChrW$(7877)
         Case "Ö": c = ChrW$(7879)
         Case "o": c = ChrW$(111)
         Case "ã": c = ChrW$(243)
         Case "ß": c = ChrW$(242)
         Case "á": c = ChrW$(7887)
         Case "â": c = ChrW$(245)
         Case "ä": c = ChrW$(7885)
         Case "«": c = ChrW$(244)
         Case "è": c = ChrW$(7889)
         Case "å": c = ChrW$(7891)
         Case "æ": c = ChrW$(7893)
         Case "ç": c = ChrW$(7895)
         Case "é": c = ChrW$(7897)
         Case "¬": c = ChrW$(417)
         Case "í": c = ChrW$(7899)
         Case "ê": c = ChrW$(7901)
         Case "ë": c = ChrW$(7903)
         Case "ì": c = ChrW$(7905)
         Case "î": c = ChrW$(7907)
         Case "i": c = ChrW$(105)
         Case "Ý": c = ChrW$(237)
         Case "×": c = ChrW$(236)
         Case "Ø": c = ChrW$(7881)
         Case "Ü": c = ChrW$(297)
         Case "Þ": c = ChrW$(7883)
         Case "u": c = ChrW$(117)
         Case "ó": c = ChrW$(250)
         Case "ï": c = ChrW$(249)
         Case "ñ": c = ChrW$(7911)
         Case "ò": c = ChrW$(361)
         Case "ô": c = ChrW$(7909)
         Case "­": c = ChrW$(432)
         Case "ø": c = ChrW$(7913)
         Case "õ": c = ChrW$(7915)
         Case "ö": c = ChrW$(7917)
         Case "÷": c = ChrW$(7919)
         Case "ù": c = ChrW$(7921)
         Case "y": c = ChrW$(121)
         Case "ý": c = ChrW$(253)
         Case "ú": c = ChrW$(7923)
         Case "û": c = ChrW$(7927)
         Case "ü": c = ChrW$(7929)
         Case "þ": c = ChrW$(7925)
         Case "®": c = ChrW$(273)
         Case "A": c = ChrW$(65)
         Case "¡": c = ChrW$(258)
         Case "¢": c = ChrW$(194)
         Case "E": c = ChrW$(69)
         Case "£": c = ChrW$(202)
         Case "O": c = ChrW$(79)
         Case "¤": c = ChrW$(212)
         Case "¥": c = ChrW$(416)
         Case "I": c = ChrW$(73)
         Case "U": c = ChrW$(85)
         Case "¦": c = ChrW$(431)
         Case "Y": c = ChrW$(89)
         Case "§": c = ChrW$(272)
      End Select
      TCVN3toUNICODE = TCVN3toUNICODE + c
   Next i
End Function


Function UNC(strTCVN3 As String)
    UNC = TCVN3toUNICODE(strTCVN3)
End Function
Nếu dùng ở Office2003 thì ok. Nhưng sang Office 2013 thì không chạy được? Tại sao vậy ạ?
 
tại sao không chạy thì có nước đi hỏi ông trời

1cewM4mbMUuTfcXjk36NHFdscvizBN2Ivp06Nf-cNCE=w560-h400-no



ztyXCVKd-rIwWA788o5E3ZOR4-oH4eYSpKFGaGWd-Qs=w1227-h579-no



0qWq4GhCZUsW3AbGnssiCgvPArVR25c2KXOnAku34rM=w645-h318-no



nCqxmPVlzyUoHi99uNjJSlVDvBB6c5cxeIUxMIyaGYM=w1017-h387-no
 
Lần chỉnh sửa cuối:
Upvote 0
Máy của mình cài windows 8 và Office 2013. Mình cứ copy code đó vào thì nó báo màu đỏ trên đầu code ạ.
Error.jpg
 
Upvote 0
bạn nhìn kĩ vào tấm hình . phải thêm từ khóa ptrsafe vào giữa 2 từ Declare và Function =>
Private Declare PtrSafe Function GetActiveWindow ................
 
Upvote 0
Giờ mọi thứ đã ổn rồi. Không gì hơn nữa ạ!
 
Upvote 0
bạn nhìn kĩ vào tấm hình . phải thêm từ khóa ptrsafe vào giữa 2 từ Declare và Function =>
Private Declare PtrSafe Function GetActiveWindow ................
Bạn cho mình hỏi thêm nhé: Mình sử dụng với office 2010 bản 64bit thì nó lại báo lỗi. Vậy phải khai báo cái declare này như thế nào ạ?
 
Upvote 0
Bạn cho mình hỏi thêm nhé: Mình sử dụng với office 2010 bản 64bit thì nó lại báo lỗi. Vậy phải khai báo cái declare này như thế nào ạ?
Nếu bạn muốn sử dụng được cho cả Excel 32 và 64 bit thì sử dụng như sau.
Mã:
#If VBA7 And Win64 Then 'Office 64-bit
    Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long
    Private Declare PtrSafe Function MessageBoxW Lib "user32" (ByVal HWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
#Else   ' Office 32-bit
    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
#End If
Function MsgboxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult
   On Error Resume Next
    Dim BStrMsg, BStrTitle
    BStrMsg = StrConv(PromptUni, vbUnicode)
    BStrTitle = StrConv(TitleUni, vbUnicode)
    
    MsgboxUni = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons)
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom