Đến nội dung


Hình ảnh
- - - - -

Tiếng Việt trong VBA


  • Please log in to reply
6 replies to this topic

#1 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 03 November 2008 - 10:09 PM

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):

Hình đã gửi

'****************************************
'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é.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 03 November 2008 - 11:38 PM

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

Bài viết đã được chỉnh sửa nội dung bởi Nguyen Hoanh: 05 November 2008 - 09:38 PM
Chỉnh sửa vì code hiển thị không đúng, xin đọc bài viết phía bên dưới

  • 1

#3 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 05 November 2008 - 10:03 AM

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.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 November 2008 - 11:58 AM

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!
  • 0

#5 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 05 November 2008 - 12:25 PM

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?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 November 2008 - 09:36 PM

Đ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
  • 2

#7 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 10 April 2012 - 10:57 AM

Còn một vấn đề nữa là Việt hóa Cation của Form. Trong Excel thì tôi đã thực hiện được, còn AutoCad thì chưa.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!