Cách đánh TIẾNG VIỆT (Có dấu) trong cửa số soạn thảo VBA

Liên hệ QC

hoacomay8x

Thành viên mới
Tham gia
2/8/11
Bài viết
33
Được thích
6
Nghề nghiệp
Là kế toán viên
Chào các thành viên GPE.
Em mới chập chững học về VBA.
Em xin thình giáo các bác một vấn để: Làm thế nào để đánh được TIẾNG VIỆT (có dấu) ở trong của số của Microshoft Visual Basic.
Ví dụ:
If OptionNu Then Cells(NextRow, 2) = "Nu"

Em muốn đánh là chữ Nữ

Hoặc trong các phần chú thích em muốn đánh TIẾNG VIỆT
 
Hàm Uniconvert tôi viết cho phép 2 tùy chọn là Telex hoặc VNI mà bạn nói gì lạ vậy? Chắc không có đọc code rồi
Dạ vâng, em xin lỗi ạ, giờ em mới chột dạ nghĩ ra.
Bài đã được tự động gộp:

Hoặc trong các phần chú thích em muốn đánh TIẾNG VIỆT
Tôi muốn gõ tiếng việt phần chú thích (Bằng Unicode dựng sẵn) như thế này thì làm thế nào?:
Mã:
'Muốn gõ tiếng việt phần chú thích bằng Unicode dựng sẵn thì làm thế nào?:
For ...
...
Next
 
Lần chỉnh sửa cuối:
Upvote 0
Tốt nhất bạn đừng nghe lời ai mà chỉnh sửa bậy bạ hệ thống
Nên nhớ rằng việc chỉnh như vậy có ảnh hướng đến mọi phần mềm chứ không riêng gì Excel ---> Nó sẽ gây rắc rối cho bạn dài dài
Riêng Excel, nếu muốn dùng MsgBox tiếp Việt Unicode thì có hàng đóng cách
Trước tiên dùng 1 hàm hổ trợ:
PHP:
Function UniConvert(Text As String, InputMethod As String) As String
  Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
  UniConvert = Text
  VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
      "e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
      "o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
      "e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
      "o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
  Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
      ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
      ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
      ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
      ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
      ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
      ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
      ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  Select Case InputMethod
    Case Is = "VNI": Temp = VNI_Type
    Case Is = "Telex": Temp = Telex_Type
  End Select
  For i = 0 To UBound(CharCode)
    UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
    UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
  Next i
End Function
Tiếp theo dùng 1 trong các cách sau:
1> Cách 1: Dùng hàm Macro 4
PHP:
Sub Test1()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    Application.ExecuteExcel4Macro ("ALERT(""" & UniConvert(Text, "VNI") & """,2)")
  End If
End Sub
2> Cách 2: Dùng DoAlert Method
PHP:
Sub Test2()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    Application.Assistant.DoAlert "THÔNG BÁO", UniConvert(Text, "VNI"), 0, 4, 0, 0, 0
  End If
End Sub
3> Cách 3: Dùng WScript.Shell
PHP:
Sub Test3()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI"), , "THÔNG BÁO", vbOKOnly
  End If
End Sub
4> Cách 4: Dùng Windows MsgBox (hàm API)
PHP:
Declare Function MessageBox Lib "user32" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal wType As Long) As Long
Sub Test4()
  Dim Text As String
  Text = "Gia1 tri5 nha65p vu7o75t quá 3 ro62i"
  If Range("B3").Value > 3 Then
    MessageBox Application.hwnd, StrPtr(UniConvert(Text, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
  End If
End Sub
Lưu ý về biến Text... Đây là cách gõ bàn phím thông thường. Với kiểu gõ VNI, nếu muốn gõ chữ Giá trị nhập vượt quá 3 rồi có phải ta sẽ gõ Gia1 tri5 nha65p vu7o75t quá 3 ro62i không? ---> Hàm Uniconvert sẽ chuyển cách gõ Gia1 tri5 nha65p vu7o75t quá 3 ro62i thành đúng tiếng Việt
Thầy @ndu96081631 ơi,
Em thử làm theo thầy thì 3 cách đầu ok, riêng cách 4 thì bị lỗi như trong hình.
Mong thầy giải thích thêm đoạn này!
Cảm ơn thầy!

===========Update============
Em đã tự sửa được rồi.
Phải khai báo thành kiểu LongPtr mới không bị lỗi trên win64
Declare PtrSafe Function MessageBox Lib "user32" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As LongPtr, ByVal lpCaption As LongPtr, ByVal wType As Long) As Long
 

File đính kèm

  • e1.png
    e1.png
    309.3 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom