Sử dụng tiếng việt có dấu trong VBA

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

boyxin

Members actively
Tham gia
10/3/08
Bài viết
1,664
Được thích
2,335
Ai cũng biết: trong VBA không hỗ trợ cách gõ tiếng việt có dấu
Ai cũng muốn sản phẩm VBA của mình hiện tiếng việt có dấu
VD: đối với font Unicode
để được chữ "ngày" thì dùng "ng" & ChrW(224) & "y"
- - - - - - - "tháng" thì dùng "th" & ChrW(225) & "ng"
- - - - - - - ................................................
1- Vậy làm thế nào để biết mã của chữ là 224; là 225; ả, ã, ạ, ằ, ắ ... ?
2- Bác nào có thể cho em xin 1 file excel mà tại A1 em đánh ả, ã, ạ, ằ, ắ thì A2 có công thức hiện ra cái mã cần tìm (trong các trường hợp A1 font Unicode, TCVN3, VNI)
 
Lần chỉnh sửa cuối:
Thì bạn dùng hàm CODE
Ví dụ cell A1 bạn gõ chử à... tại cell B1 bạn gõ công thức
=CODE(A1)
ANH TUẤN
 
Upvote 0
Thì bạn dùng hàm CODE
Ví dụ cell A1 bạn gõ chử à... tại cell B1 bạn gõ công thức
=CODE(A1)
ANH TUẤN
Làm theo bác B1 = CODE(A1) rồi kéo fill xuống
A1 = thì B1 = CODE(A1) = 63
A2 = thì B2 = CODE(A2) = 63
A3 = ă thì B3 = CODE(A3) = 63
A4 = thì B4 = CODE(A4) = 63
A5 = thì B5 = CODE(A5) = 63
A6 = thì B6 = CODE(A6) = 63
A7 = thì B7 = CODE(A7) = 63
A8 = thì B8 = CODE(A8) = 63
A9 = thì B9 = CODE(A9) = 63
A10 = thì B10= CODE(A10)= 63
A11 = thì B11= CODE(A11)= 63
A12 = thì B12= CODE(A12)= 63
1- Sao toàn ra kết quả là 63 vậy ?
2- Trường hợp font Unicode: trong VBA dùng ChrW(63) thì lại ra kết quả là "?"
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như File này mình down về từ GPE. các bạn tham khảo xem

TDN
 

File đính kèm

Upvote 0
Hình như File này mình down về từ GPE. các bạn tham khảo xem

TDN
Bảng mã Unicode này thể hiện rất tốt trên các cell nhưng khi áp dụng vào MsgBox thì nhiều trường hợp không còn đúng nữa.
Vậy muốn tiéng việt có dấu trên các MsgBox thì có cách nào không? mong được chỉ giáo

Theo tôi biết thì TUANVNUI đã giải quyết vấn đề này hoàn chỉnh rồi mà, bạn liên hệ xem, chắc sẽ được câu trả lời như ý.
Mình tìm mãi mà không thấy ở chỗ nào, có thể cho xin link được không?
 
Upvote 0
Các bác ơi!
Các bác thử vào VBA và chọn Tool => Option => Thẻ Editer Format => Font : .Vntime
Chọn bộ gõ TCVN3.
OK gõ Tiếng Việt phả phê ...
Có nhiều các phần mềm bạn cũng có thể sử dụng được như vậy.
Mình thường dùng như thế VD : FreeNote, ATNotes ....
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tải ví dụ hướng dẫn dưới đây (anh Bình và anh Tuân lập), dùng cho cả Msgbox và phương thức Inputbox
 

File đính kèm

Upvote 0
Bạn tải ví dụ hướng dẫn dưới đây (anh Bình và anh Tuân lập), dùng cho cả Msgbox và phương thức Inputbox
Thầy Hướng à, cái này chỉ hiển thị Tiếng Việt tốt trên MSGBOX còn INPUTBOX thì không được, Thầy test lại xem. Mình cũng đã thử nhiều cách với INPUTBOX nhưng không được. Chắc chỉ còn cách Hook ???

TDN
 
Upvote 0
to boyxin: bạn vào trang của tuanvnui www.bluesoft.com mà xem này (nhiều thứ hay hơn nữa đấy}}}}})
 
Upvote 0
Ai cũng biết: trong VBA không hỗ trợ cách gõ tiếng việt có dấu
Ai cũng muốn sản phẩm VBA của mình hiện tiếng việt có dấu
1- Vậy làm thế nào để biết mã của chữ là 224; là 225; ả, ã, ạ, ằ, ắ ... ?
2- Bác nào có thể cho em xin 1 file excel mà tại A1 em đánh ả, ã, ạ, ằ, ắ thì A2 có công thức hiện ra cái mã cần tìm (trong các trường hợp A1 font Unicode, TCVN3, VNI)
Tìm mã của font VNI, TCVN3 dùng hàm CODE(ký tự). Hàm CODE dùng cho UNICODE nó cho kết quả sai vì nó chỉ biết đến mã 255.
Nhưng khi dùng CODE nhớ chú ý VNI là bảng mã 2 byte cho các ký tự tiếng việt có dấu, TCVN3 là bảng mã 1 byte.
Ví dụ ô A1 có ký tự .
+ Font VNI: gồm 2 ký tự ghép lại là ký tự o và dấu mũ ^.
Do đó CODE(A1) =111 là mã của ký tự o và CODE(RIGHT(A1,1))=225 là mã của ^.
+ Font TCVN3: CODE(A1) =232
+ Font UNICODE: viết hàm CodeUni này để thay cho hàm CODE. CodeUni(A1)=7889
Mã:
[FONT=Courier New][SIZE=4][COLOR=blue]Function CodeUni(chuoi As String) As Integer[/COLOR][/SIZE][/FONT]
[SIZE=4][FONT=Courier New][COLOR=blue]CodeUni = AscW(chuoi)[/COLOR][/FONT][/SIZE]
[SIZE=4][FONT=Courier New][COLOR=blue]End Function[/COLOR][/FONT][/SIZE]

VD: đối với font Unicode
để được chữ "ngày" thì dùng "ng" & ChrW(224) & "y"
- - - - - - - "tháng" thì dùng "th" & ChrW(225) & "ng"
- - - - - - - ................................................
Trong VBA, viết chuỗi UNICODE tiếng Việt rất khó vì phải ghép chuỗi, hàm, chuỗi, ... và phải tra bảng mã. Nhập vào xong nhưng chưa chắc đúng !
Bạn dùng hàm VbaUni giúp cho việc này:
Mã:
[FONT=Courier New][SIZE=4][COLOR=blue]Function VbaUni(chuoi As String) As String[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]If chuoi = "" Then[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] VbaUni = """"""[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]Else[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] chuoi = chuoi & " "[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] If AscW(Left(chuoi, 1)) < 256 Then VbaUni = """"[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] For n = 1 To Len(chuoi) - 1[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   uni1 = Mid(chuoi, n, 1)[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   uni2 = AscW(Mid(chuoi, n + 1, 1))[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   If AscW(uni1) > 255 And uni2 > 255 Then[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]     VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & "[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   ElseIf AscW(uni1) > 255 And uni2 < 256 Then[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]     VbaUni = VbaUni & "ChrW(" & AscW(uni1) & ") & """[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   ElseIf AscW(uni1) < 256 And uni2 > 255 Then[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]     VbaUni = VbaUni & uni1 & """ & "[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   Else[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]     VbaUni = VbaUni & uni1[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   End If[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] Next[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] If Right(VbaUni, 4) = " & """ Then[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   VbaUni = Mid(VbaUni, 1, Len(VbaUni) - 4)[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] Else[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]   VbaUni = VbaUni & """"[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue] End If[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]End If[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=blue]End Function[/COLOR][/SIZE][/FONT]

Ví dụ nhập "Hỗ trợ viết code Unicode" vào biến chuoi trong VBA
Bạn nhập "Hỗ trợ viết code Unicode" vào 1 ô trên bảng tính (A1). nhập =VbaUni(A1) vào A2. A2 có kết quả:
"H" & ChrW(7895) & " tr" & ChrW(7907) & " vi" & ChrW(7871) & "t code Unicode"
Bạn copy A2 và past vào module nơi bạn cần nhập "Hỗ trợ viết code Unicode"
Kết quả: chuoi = "H" & ChrW(7895) & " tr" & ChrW(7907) & " vi" & ChrW(7871) & "t code Unicode"
Vừa nhanh và chính xác.
 
Upvote 0
Em nghĩ làm như bác Long chỉ giới hạn ở mức độ nội dung ít thôi, còn nếu 3-4 dòng thì chắc là rất mệt.
 
Upvote 0
Em nghĩ làm như bác Long chỉ giới hạn ở mức độ nội dung ít thôi, còn nếu 3-4 dòng thì chắc là rất mệt.
100% mệt hơn là gõ tiếng Việt không dấu rồi. Nhưng khỏe hơn là tự gõ vào module.
Ví dụ cần đoạn code tất cả các ký tự tiếng Việt có dấu Unicode:
Conts uni="áàảãạăắằẳẵặ .... ýỳỷỹỵ"
nếu viết bằng mã unicode phải như vầy:
Conts uni="
"áà" & ChrW(7843) & "ã" & ChrW(7841) & ChrW(259) & ChrW(7855) & ChrW(7857) & ChrW(7859) & ChrW(7861) & ChrW(7863) & .... & "ý" & ChrW(7923) & ChrW(7927) & ChrW(7929) & ChrW(7925)
Nếu nhập thì rất mất thời gian, nếu có sai không biết sai chỗ nào !
 
Upvote 0
Web KT

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

Back
Top Bottom