Kiểu bảng mã chữ xuất từ UserForm sang bảng tính

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,183
Được thích
24,627
Cái này tôi viết cách chuyển đổi bảng mã sang Unicode từ UserForm sang bảng tính.
Có 2 trường hợp:
- Thứ nhất: TextBox1 dùng kiểu font Tahoma và phải gõ Unicode để hiện chữ, không cần phải dùng hàm chuyển đổi (tôi dùng Excel 2007 ngon lành, chưa test trên 2003).
- Thứ hai: TextBox2 dùng kiểu font VK Sans Serif và phải gõ TCVN để hiện chữ, phải dùng hàm chuyển đổi ABC2Uni.

Tôi gửi file lên để các bạn và anh Cao Mạnh Sơn tham khảo, có gì phản hồi nhé.
 

File đính kèm

Các controls trong FM20.DLL dùng trên Userform của VBA nhập Unicode được mà anh. Sao lại nhập kiểu ABC rồi lại chuyển sang Unicode? Hay anh có ý giải quyết vấn đề nào khác?
 
Upvote 0
Bài này anh Sơn hỏi mình về không chuyển chữ Unicode từ Textbox sang cell được, hay là bác đó vẫn dùng bản SP1 nhỉ?
 
Upvote 0
Cái này tôi viết cách chuyển đổi bảng mã sang Unicode từ UserForm sang bảng tính.
Có 2 trường hợp:
- Thứ nhất: TextBox1 dùng kiểu font Tahoma và phải gõ Unicode để hiện chữ, không cần phải dùng hàm chuyển đổi (tôi dùng Excel 2007 ngon lành, chưa test trên 2003).
- Thứ hai: TextBox2 dùng kiểu font VK Sans Serif và phải gõ TCVN để hiện chữ, phải dùng hàm chuyển đổi ABC2Uni.

Tôi gửi file lên để các bạn và anh Cao Mạnh Sơn tham khảo, có gì phản hồi nhé.
Các controls trong FM20.DLL dùng trên Userform của VBA nhập Unicode được mà anh. Sao lại nhập kiểu ABC rồi lại chuyển sang Unicode? Hay anh có ý giải quyết vấn đề nào khác?

Theo tôi nghĩ thì anh PhanTuHuong muốn bàn về cách lập trình chuyển mã chứ không phải về ứng dụng cụ thể.

Xin góp ý: Khi nói về Unicode mà anh không nói rõ là Unicode nào, dựng sẵn hay tổ hợp, trong mỗi loại ấy còn có nhiều bảng mã khác nhau. Điểm đặc biệt khiến cho ta đôi khi quên sự khác nhau ấy là vì font chữ Unicode thì lại có thể dùng chung cho các loại bảng mã Unicode.
Cùng 1 font chữ ví dụ như Tahoma mà cả Unicode UTF-8 lẫn CP 1258 hay bảng mã Unicode khác .. cũng đều hiển thị đúng tiếng Việt cả.
Nhưng khi so sánh chuỗi, truy tìm ... thì có thể kết quả không còn đúng vì là do dùng các bảng mã khác nhau.
 
Upvote 0
Bài này anh Sơn hỏi mình về không chuyển chữ Unicode từ Textbox sang cell được, hay là bác đó vẫn dùng bản SP1 nhỉ?
Cám ơn anh Hướng, tôi xem và đã hiểu, sau khi kiểm tra lại tôi thấy trong đoạn code cũ bản thân nó đã dùng hàm chuyển đổi từ Vni.
Thế còn các Caption của các Form thì sao tôi chỉ có thể nhập được chữ không dấu và trong nội dung các đoạn code muốn chèn thêm các tiêu đề chữ vào cuối các văn bản thì cũng đành phải sử dụng chữ không dấu. Tôi đang lò dò vấn đề này, không có người hướng dẫn trực tiếp lại chưa được học nên khó quá.
 
Upvote 0
Cám ơn anh Hướng, tôi xem và đã hiểu, sau khi kiểm tra lại tôi thấy trong đoạn code cũ bản thân nó đã dùng hàm chuyển đổi từ Vni.

Đây là code chuyển từ VNI sang Unicode của anh Truongphu (caulacbovb), anh tham khảo nhé

Mã:
Public Function VniToUni(str$) As String
    Dim VNI$, UNI$, i&, sUni$, arrUNI() As String
    VNI = "aù,aø,aû,aõ,aï,aâ,aê,aá,aà,aå,aã,aä,aé,aè,aú,aü,aë,AÙ,AØ,AÛ,AÕ,AÏ,AÂ,AÊ,AÁ,AÀ,AÅ,AÃ,AÄ,AÉ,AÈ,AÚ,AÜ,AË,eù,eø,eû,eõ,eï,eâ,eá,eà,eå,eã,eä,EÙ,EØ,EÛ,EÕ,EÏ,EÂ,EÁ,EÀ,EÅ,EÃ,EÄ,í ,ì ,æ ,ó ,ò ,Í ,Ì ,Æ ,Ó ,Ò ,où,oø,oû,oõ,oï,oâ,ô,oá,oà,oå,oã,oä,ôù,ôø,ôû,ôõ,ôï,OÙ,OØ,OÛ,OÕ,OÏ,OÂ,Ô ,OÁ,OÀ,OÅ,OÃ,OÄ,ÔÙ,ÔØ,ÔÛ,ÔÕ,ÔÏ,uù,uø,uû,uõ,uï,ö ,öù,öø,öû,öõ,öï,UÙ,UØ,UÛ,UÕ,UÏ,Ö ,ÖÙ,ÖØ,ÖÛ,ÖÕ,ÖÏ,yù,yø,yû,yõ,î ,YÙ,YØ,YÛ,YÕ,Î ,ñ ,Ñ "
    UNI = "E1,E0,1EA3,E3,1EA1,E2,103,1EA5,1EA7,1EA9,1EAB,1EAD,1EAF,1EB1,1EB3,1EB5,1EB7,C1,C0,1EA2,C3,1EA0,C2,102,1EA4,1EA6,1EA8,1EAA,1EAC,1EAE,1EB0,1EB2,1EB4,1EB6,E9,E8,1EBB,1EBD,1EB9,EA,1EBF,1EC1,1EC3,1EC5,1EC7,C9,C8,1EBA,1EBC,1EB8,CA,1EBE,1EC0,1EC2,1EC4,1EC6,ED,EC,1EC9,129,1ECB,CD,CC,1EC8,128,1ECA,F3,F2,1ECF,F5,1ECD,F4,1A1,1ED1,1ED3,1ED5,1ED7,1ED9,1EDB,1EDD,1EDF,1EE1,1EE3,D3,D2,1ECE,D5,1ECC,D4,1A0,1ED0,1ED2,1ED4,1ED6,1ED8,1EDA,1EDC,1EDE,1EE0,1EE2,FA,F9,1EE7,169,1EE5,1B0,1EE9,1EEB,1EED,1EEF,1EF1,DA,D9,1EE6,168,1EE4,1AF,1EE8,1EEA,1EEC,1EEE,1EF0,FD,1EF3,1EF7,1EF9,1EF5,DD,1EF2,1EF6,1EF8,1EF4,111,110"
    arrUNI = Split(UNI, ",")
     For i = 1 To Len(str)
            If InStr(VNI, Mid(str, i, 2)) > 0 And Len(Mid(str, i, 2)) = 2 Then
                sUni = sUni & ChrW("&h" & arrUNI(InStr(VNI, Mid(str, i, 2)) \ 3))
                 i = i + 1
            ElseIf InStr(VNI, Mid(str, i, 1) & " ") > 0 Then
                sUni = sUni & ChrW("&h" & arrUNI(InStr(VNI, Mid(str, i, 1) & " ") \ 3))
            End If
        If InStr(VNI, Mid(str, i, 1)) = 0 Or InStr("a,A,e,E,o,O,u,U,y,Y, ", Mid(str, i, 1)) > 0 Then sUni = sUni & Mid(str, i, 1)
    Next
    VniToUni = sUni
End Function

Thế còn các Caption của các Form thì sao tôi chỉ có thể nhập được chữ không dấu và trong nội dung các đoạn code muốn chèn thêm các tiêu đề chữ vào cuối các văn bản thì cũng đành phải sử dụng chữ không dấu.

Caption tiếng Việt của Form VBA hay VB6 là vấn đề nan giải anh ạ, phải dùng mẹo.

Còn anh định nối chữ đồng sau số thì làm hàm nối & trong excel là được, không nên can thiệp vào code nếu không hiểu.
 
Upvote 0
Cám ơn anh Hướng, tôi xem và đã hiểu, sau khi kiểm tra lại tôi thấy trong đoạn code cũ bản thân nó đã dùng hàm chuyển đổi từ Vni.
Thế còn các Caption của các Form thì sao tôi chỉ có thể nhập được chữ không dấu và trong nội dung các đoạn code muốn chèn thêm các tiêu đề chữ vào cuối các văn bản thì cũng đành phải sử dụng chữ không dấu. Tôi đang lò dò vấn đề này, không có người hướng dẫn trực tiếp lại chưa được học nên khó quá.
Bạn dùng chiêu này có phải là khỏe nhiều không
http://www.giaiphapexcel.com/forum/showpost.php?p=167468&postcount=15
 
Upvote 0
Caption tiếng Việt của Form VBA hay VB6 là vấn đề nan giải anh ạ, phải dùng mẹo.

Còn anh định nối chữ đồng sau số thì làm hàm nối & trong excel là được, không nên can thiệp vào code nếu không hiểu.

Cái này em làm trong UMU - Unicode Menu In Userform rồi mà anh. Chỉ mất đúng một dòng lệnh.
Demo.jpg

Windows XP, font chữ trên Caption không phải là Unicode, phải đưa về Unicode bằng các font khác như Tahoma, Time New Roman, Veranda, ...Từ Windows Vista, 7, Caption của Form là Unicode rồi nên không phải chỉnh.
 
Upvote 0
Caption tiếng Việt của Form VBA hay VB6 là vấn đề nan giải anh ạ, phải dùng mẹo.

Mẹo chỉ là dùng trước năm 2003 thôi bạn ơi.
Bạn có để ý là ở Vovisoft.com (cây đa cây đề của VB Việt kiều) từ 2003 người ta không còn nói đến mẹo unicode cho VB nữa hay không?
 
Upvote 0
Tuân thử làm MDI Form lên Unicode ko (Main form hiện Unicode, ví dụ "Màn hình chính", khi child form (cũng là Unicode, ví dụ: "Cửa sổ 1") maximized lên thì caption của main form là Unicode kiểu Tên màn hình chính [Cửa sổ 1], restore child form về thì main+child form vẫn là unicode)?

Nếu có gửi VB demo project sample (ít ít thứ thôi và đừng kèm theo ocx nhé)

Mẹo chỉ là dùng trước năm 2003 thôi bạn ơi.
Bạn có để ý là ở Vovisoft.com (cây đa cây đề của VB Việt kiều) từ 2003 người ta không còn nói đến mẹo unicode cho VB nữa hay không?

Khi nào ko viết code cho vấn đề này thì mới là ko dùng mẹo. 1 nửa dòng code cho nó thì vẫn là mẹo mà thôi vì VB6 ko hỗ trợ Unicode.

Vụ Unicode form title này hình như đã bàn lâu lắm rồi (thậm chí tôi đã đưa project sample lên đâu đó rồi)
 
Lần chỉnh sửa cuối:
Upvote 0
Tuân thử làm MDI Form lên Unicode ko (Main form hiện Unicode, ví dụ "Màn hình chính", khi child form (cũng là Unicode, ví dụ: "Cửa sổ 1") maximized lên thì caption của main form là Unicode kiểu Tên màn hình chính [Cửa sổ 1], restore child form về thì main+child form vẫn là unicode)?

Nếu có gửi VB demo project sample (ít ít thứ thôi và đừng kèm theo ocx nhé)

Vụ MDI Form chắc khó lắm, hay nghe anh nói rồi mà :).
 
Upvote 0
Khi nào ko viết code cho vấn đề này thì mới là ko dùng mẹo. 1 nửa dòng code cho nó thì vẫn là mẹo mà thôi vì VB6 ko hỗ trợ Unicode.

Vụ Unicode form title này hình như đã bàn lâu lắm rồi (thậm chí tôi đã đưa project sample lên đâu đó rồi)

Tùy vào việc mà dùng thôi. Nếu anh phải viết chương trình cho tiếng Hoa, tiếng Thái .... thì sao?

Dùng API sẽ tác động đến hệ thống và các chương trình đang chạy song song sẽ bị ảnh hưởng.
Do tiếng Việt có cái hên là các chữ cái tiếng Anh (ngôn ngữ phổ biến trên thế giới) đều có trong tiếng Việt.
Như thế cũng không ảnh hưởng gì mấy. Tận dụng cách này cũng tốt.

Nhưng thái hành thì không cần phải mài đại đao. Window cũng có hổ trợ tiếng Việt như các tiếng Hoa, Thái ...
Sử dụng cái Window đã hổ trợ thì sẽ tận dụng được nhiều thứ.

Việc code để chuyển mã sang UTF-8 là bắt buộc, không thể gõ trực tiếp.
Nhưng như vậy cũng không thể nói là VB không hổ trợ unicode. Có chăng là cách của ngưởi ta nói thôi.
VB vẫn ánh xạ được từ locale code page sang UTF-8.
Khi ta gõ code để sau đó VB biên dịch thành mã máy vẫn khác với chuyện người dùng gõ vào textbox với tư cách nhập liệu.

Trên GPE cũng từng có người nói đến chuyện này nhưng vẫn chưa chính xác, giải thích của người này là chưa đúng:
http://www.giaiphapexcel.com/forum/showthread.php?p=181858#post181858
 
Upvote 0
Tùy vào việc mà dùng thôi. Nếu anh phải viết chương trình cho tiếng Hoa, tiếng Thái .... thì sao?

Dùng API sẽ tác động đến hệ thống và các chương trình đang chạy song song sẽ bị ảnh hưởng.
Do tiếng Việt có cái hên là các chữ cái tiếng Anh (ngôn ngữ phổ biến trên thế giới) đều có trong tiếng Việt.
Như thế cũng không ảnh hưởng gì mấy. Tận dụng cách này cũng tốt.

Nhưng thái hành thì không cần phải mài đại đao. Window cũng có hổ trợ tiếng Việt như các tiếng Hoa, Thái ...
Sử dụng cái Window đã hổ trợ thì sẽ tận dụng được nhiều thứ.

Việc code để chuyển mã sang UTF-8 là bắt buộc, không thể gõ trực tiếp.
Nhưng như vậy cũng không thể nói là VB không hổ trợ unicode. Có chăng là cách của ngưởi ta nói thôi.
VB vẫn ánh xạ được từ locale code page sang UTF-8.
Khi ta gõ code để sau đó VB biên dịch thành mã máy vẫn khác với chuyện người dùng gõ vào textbox với tư cách nhập liệu.

Trên GPE cũng từng có người nói đến chuyện này nhưng vẫn chưa chính xác, giải thích của người này là chưa đúng:
http://www.giaiphapexcel.com/forum/showthread.php?p=181858#post181858
Mong rằng có dịp rảnh rổi, bạn bỏ chút thời gian viết vài bài về Unicode tổ hợp, dựng sẳn.. về Font 1 byte, 2 byte... vân vân.. (nói chung mọi thứ có liên quan đến bảng mã)
Tin chắc rằng trên diển đàn vẫn còn rất nhiều người mù mờ về vấn đề này (trong đó có tôi)
Cảm ơn bạn trước!
 
Upvote 0
Web KT

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

Back
Top Bottom