Hàm chuyển mã Font Unicode tiếng Việt trên VBA

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

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Mình thấy hiện nay:
-Nếu để hiện tiếng Việt trên Msgbox, Title thường rất khó.
-Muốn kết quả trả về bằng chuỗi tiếng Việt font Unicode thường ghép mã cũng không đơn giản.

Lang thang trên Internet qua bên "Thủ thuật Accecs " có cái hàm này khá gọn mà hay. Mình chép về cải biên thành 2 hàm sau. Mình giới thiệu anh em tham khảo:

1/Để hiển thị tiếng Việt trên msgbox:
Mã:
Function VBAUni(ByVal chuoi As String) As String
Dim n, Uni1, Uni2
If chuoi = "" Then
VBAUni = ""
Else
chuoi = chuoi & " "
If AscW(Left(chuoi, 1)) < 256 Then VBAUni = """"
For n = 1 To Len(chuoi) - 1
Uni1 = Mid(chuoi, n, 1)
Uni2 = AscW(Mid(chuoi, n + 1, 1))
If AscW(Uni1) > 255 And Uni2 > 255 Then
VBAUni = VBAUni & "ChrW(" & AscW(Uni1) & ") & "
ElseIf AscW(Uni1) > 255 And Uni2 < 256 Then
VBAUni = VBAUni & "ChrW(" & AscW(Uni1) & ") & """
ElseIf AscW(Uni1) < 256 And Uni2 > 255 Then
VBAUni = VBAUni & Uni1 & """ & "
Else
VBAUni = VBAUni & Uni1
End If
Next
If Right(VBAUni, 4) = " & """ Then
VBAUni = Mid(VBAUni, 1, Len(VBAUni) - 4)
Else
VBAUni = VBAUni & """"
End If
End If
VBAUni = Right(Left(VBAUni, Len(VBAUni) - 1), Len(VBAUni) - 2)
End Function
Sử dụng hàm (Trong cửa sổ VBA cứ gõ tiếng Việt bình thường, dù hiển thị lung tung hàm sẽ chuyển lại):
Mã:
Private Sub CommandButton1_Click()
Dim ch
ch = "..." & Chr(10)
ch = ch & "Em nhí anh nh­ng ch¼ng nãi thµnh lêi" & Chr(10)
ch = ch & "Gom gãp l¹i cho m­a nhiÒu thªm n÷a." & Chr(10)
ch = ch & "Nçi nhí theo em lín dÇn thµnh ngän löa" & Chr(10)
ch = ch & "M·i bËp bïng ®èt ch¸y c¶ ®ªm th©u" & Chr(10) & Chr(10)
ch = ch & "Nçi nhí ®o¹ ®µy cho ®«i m¾t thªm s©u." & Chr(10)
ch = ch & "Em ­íc thêi gian tr«i nhanh cµng nhanh n÷a." & Chr(10)
ch = ch & "Nh÷ng giÊc m¬ lu«n cã anh ë gi÷a." & Chr(10)
ch = ch & "Chan chøa t×nh, chan chøa yªu th­¬ng." & Chr(10) & Chr(10)
ch = ch & "Em giËn m×nh sao cø m·i vÊn v­¬ng." & Chr(10)
ch = ch & "Ng­êi d­ng kh¸c hä sao mµ tha thiÕt thÕ." & Chr(10)
ch = ch & "ChuyÖn t×nh yªu tõ ngµn x­a kh«n dÔ." & Chr(10)
ch = ch & "§«i chóng m×nh ©u còng bëi c¸i duyªn." & Chr(10) & Chr(10)
ch = ch & Space(40) & "D­¬ng H¹ My." & Chr(10)

MsgBox VBAUni(ch), , VBAUni("TiÕng ViÖt Unicode trªn VBA")
End Sub

Đây là hình mình nhập trong VBA

BaiTho_Msgbox.gif

Và khi thực hiện:
Msgbox.gif

2/Tạo chuỗi mã tiếng Việt font Unicode:
Mã:
Function CodeVBAUni(ByVal chuoi As String) As String
Dim n, Uni1, Uni2
If chuoi = "" Then
CodeVBAUni = """"""
Else
chuoi = chuoi & " "
If AscW(Left(chuoi, 1)) < 256 Then CodeVBAUni = """"
For n = 1 To Len(chuoi) - 1
Uni1 = Mid(chuoi, n, 1)
Uni2 = AscW(Mid(chuoi, n + 1, 1))
If AscW(Uni1) > 255 And Uni2 > 255 Then
CodeVBAUni = CodeVBAUni & "ChrW(" & AscW(Uni1) & ") & "
ElseIf AscW(Uni1) > 255 And Uni2 < 256 Then
CodeVBAUni = CodeVBAUni & "ChrW(" & AscW(Uni1) & ") & """
ElseIf AscW(Uni1) < 256 And Uni2 > 255 Then
CodeVBAUni = CodeVBAUni & Uni1 & """ & "
Else
CodeVBAUni = CodeVBAUni & Uni1
End If
Next
If Right(CodeVBAUni, 4) = " & """ Then
CodeVBAUni = Mid(CodeVBAUni, 1, Len(CodeVBAUni) - 4)
Else
CodeVBAUni = CodeVBAUni & """"
End If
End If
End Function

Đây là đoạn báo mình sẽ chuyển mã
"Messi cuối cùng cũng đã nổ súng, nhưng bàn thắng của anh cũng chỉ giúp cho đoàn quân của Pep kịp giật lại một điểm để ra về sau trận cầu quá đỗi khó khăn ở xứ Basque. Những nhà đương kim vô địch đã thể hiện một bộ mặt nhạt nhòa tại San Mames."

Kết quả như hình sau:

CodeMsgbox.gif

Các bạn tuỳ cơ sử dụng nha.
Cám ơn anh em bên "Thủ thuật Access" đã chia sẻ.
 
Mình quên không gửi kèm file. Vào sửa không được nên giờ bổ xung
 

File đính kèm

Upvote 0
Mình thấy hiện nay:
-Nếu để hiện tiếng Việt trên Msgbox, Title thường rất khó.
-Muốn kết quả trả về bằng chuỗi tiếng Việt font Unicode thường ghép mã cũng không đơn giản.
Cái này của bạn chỉ hiển thị Msgbox tiếng việt, Tittle tiếng việt nếu bạn sửa font của Msgbox, Tittle trong Window, để chế độ mặc định font Unicode thì vẫn lỗi như thường! Chẳng cần dùng hàm gì cả, chỉ cần chọn Font trong cửa sổ VBA là Font TCVN3, gõ tiếng Việt bét nhè. Chuyển font Msgbox, Tittle của Window là font TCVN3, hiển thị cũng ... "bét nhè" luôn.
 
Upvote 0
Mình nói lại cho rõ:
-Cái này không phải là cuả mình mà mình sưu tầm thôi.
-Mình đã nói rồi, tuỳ cơ mà sử dụng. Khi bạn đã chỉnh lại các mặc định của Wind hay VBA thì nó đâu còn là nó nữa. Đã vậy thì ta cố định luôn font Vni khỏi code cũng có tiếng Việt.
 
Upvote 0
Mình nói lại cho rõ:
-Cái này không phải là cuả mình mà mình sưu tầm thôi.
-Mình đã nói rồi, tuỳ cơ mà sử dụng. Khi bạn đã chỉnh lại các mặc định của Wind hay VBA thì nó đâu còn là nó nữa. Đã vậy thì ta cố định luôn font Vni khỏi code cũng có tiếng Việt.
Nếu phải chỉnh sửa hệ thống thì rắc rối lắm ---> code chạy được trên máy mình nhưng gửi cho người khác lại "tèo"
UniMsgBox đã nói nhiều trên diễn đàn rồi mà anh... Thanh tiêu đề thì ta không nói làm gì, riêng phần nội dung thì đã có hàng đống control giống như MsgBox nhưngcó thể hiển thị được tiếng Việt Unicode, cần gì phải dùng MsgBox của Excel
 
Upvote 0
Web KT

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

Back
Top Bottom