Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
phantuhuong

Tiếng Việt trong VBA

Các bài được khuyến nghị

VB6 cũng như VBA, việc thể hiện tiếng Việt rất khó khăn vì chúng không trợ Unicode. Module sau sẽ giúp chúng ta sử dụng thông báo (Msgbox) hiện tiếng Việt với MsgboxUni (biến tấu từ Msgbox):

 

TiengVietVBA.jpg

 

'****************************************

'Tac gia: Nguyen Duy Tuan

'Tel : 0904.210.337

'E.Mail : tuanktcdcn@yahoo.com

'Website: www.bluesofts.net

'****************************************

'Khai bao cac ham API trong thu vien User32.DLL

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, 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

'Ham TCVN3toUNICODE duoc viet boi Binh - OverAC

'www.giaiphapexcel.com

 

Public 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

 

Public Function UNC(strTCVN3 As String)

UNC = TCVN3toUNICODE(strTCVN3)

End Function

 

Thủ tục dưới đây:

 

Private Sub CommandButton2_Click()
MsgBoxUni UNC("Chµo mõng c¸c b¹n ®Õn víi ng«n ng÷ lËp tr×nh VBA trong AutoCad"), vbInformation, UNC("DiÔn ®µn www.cadviet.com")
End Sub

 

Tuy nhiên với phương thức InputBox hiện vẫn đang "bó tay".

 

Bác nào có kinh nghiệm cho ý kiến nhé.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tuy nhiên với phương thức InputBox hiện vẫn đang "bó tay".

 

Bác nào có kinh nghiệm cho ý kiến nhé.

 

Em tìm được trên mạng cái UniInputBox, em test rồi, chay good lắm.

Về mặt nguyên tắc thì cũng giống như cái bác Hướng vừa post, là làm hàm chuyển TCVN sang Unicode và sử dụng lại một số hàm API của Windows.

Phần code hàm chuyển font của người viết đoạn code dưới đây sáng sủa hơn một chút, đỡ phải làm một đoạn case dài dằng dặc.

 

Code của form

*** Download ở bài bên dưới ****

 

Code của Module:

*** Download ở bài bên dưới ****

Chỉnh sửa theo Nguyen Hoanh
Chỉnh sửa vì code hiển thị không đúng, xin đọc bài viết phía bên dưới
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này bên Excel chạy tốt, nhưng Cad vẫn bị hạn chế. Riêng phương thức InputBox thì phải sử dụng Application.InputBox mới hiện được chữ tiếng Việt.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cái này bên Excel chạy tốt, nhưng Cad vẫn bị hạn chế. Riêng phương thức InputBox thì phải sử dụng Application.InputBox mới hiện được chữ tiếng Việt.

Code trên là em thử nghiệm thành công với AutoCAD mà bác!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Code trên là em thử nghiệm thành công với AutoCAD mà bác!

 

Đang nói về code mình post Hoành ạ. Còn code Hoành post mình chạy toàn thấy lỗi, có thể tải file nên được không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đang nói về code mình post Hoành ạ. Còn code Hoành post mình chạy toàn thấy lỗi, có thể tải file nên được không?

Đúng là đoạn code trên bị lỗi, do khi dòng quá dài sẽ bị tự động ngắt dòng. Do đó hằng số string bị thay đổi giá trị.

 

Đây là file trên: InputBoxTiengViet.dvb

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 5/11/2008 tại 21:36, Nguyen Hoanh đã nói:

Đúng là đoạn code trên bị lỗi, do khi dòng quá dài sẽ bị tự động ngắt dòng. Do đó hằng số string bị thay đổi giá trị.

 

Đây là file trên: InputBoxTiengViet.dvb

 

Tôi tải lại InputBox tiếng Việt trong VBA.

InputBoxTiengViet.rar

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×