Làm sao chuyển font từ VntimH sang Times New Roma vấn giữ được chữ IN (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

AlltoUni bảo đảm không can thiệp vào format:

Trước khi chuyển đổi:

View attachment 58949

Sau khi chuyển đổi:

View attachment 58950

Cái này chắc do lỗi máy của em ở nhà, em thử lại rồi không vấn đề gì về Format đúng như thày nói. Cái mà em đưa lên đúng như thày nhận xét nó chỉ có mỗi tội hơi ương bướng là cứ xuất hiện Menu ở trên không cho gỡ, tuy nhiên nó có ưu điểm rất lớn đó là chuyển đổi chuẩn 100%, chữ hoa vẫn là chữ hoa, chữ thường vẫn là chữ thường, ô có công thức chuyển đổi vẫn giữ nguyên và 1 ưu điểm nữa là có thể tuỳ chọn sửa tất cả các Sheet luôn rât nhanh về tốc độ (vì cái này em đi xin nên không biết Pass VBA của nó là gì).
 
Bạn dùng cái gì thì tuỳ bạn, tốc độ thì tôi không dám so sánh vì không có điều kiện để test.
Còn lỗi chữ I hoa như tôi nói thì sao? Những lỗi nhấn capslock khi dùng font .vnH thì sao?

Còn chuyện thực hiện 1 lần cho cả sheet thì không khó, chỉ thêm 1 dòng lệnh vào Sub abc():

Activesheet.Cells.SpecialCells(2).Select

Nếu muốn làm mọi sheet thì dùng 1 vòng lặp
Nếu muốn chọn sheet tuỳ ý thì thêm 1 UserForm
...

Cái căn bản là Function AlltoUni(), còn code sử dụng nó thì tuỳ biến theo ý người sử dụng. Các Add-ins khác cũng thế.
 
Thật tuyệt vời em vừa tách được một Add_Ins hoàn hảo 100% luôn thày ah? Không những chuyển không bị lỗi mà còn giữ được nguyên công thức.
Đại xem lại có lỗi gì không, sao mình tải về có chuyển được font gì đâu mặc dù chức năng chuyển đổi chữ thường, chữ hoa vẫn được?
 
Lần chỉnh sửa cuối:
Cảm ơn các bác em đã tìm ra được trên diễn đàn Functions đúng ý em đang cần rồi, em thấy nó rất hay em chưa kịp lưu lại trang đó. Em xin phép được đưa lên đây để mọi người cần dùng
Thưa thày ptm0412 em thấy Functions rất gần với ứng dụng của thày, nó cũng bị lỗi chữ Đ như thày vừa sửa. Em chưa biết nhiều về VBA kính mong thày khắc phục cho em lỗi trên của Functions. Em cảm ơn thày nhiều.
 
Bạn chưa phân biệt được 2 lỗi khác nhau giữa AlltoUni và Functions của PaulSteigel:
Lỗi Đ của tôi mới sửa cho AlltoUni là lỗi nhấn shift hoặc capslock khi đánh chữ in với font .vnxxH. Cùng loại lỗi này còn 5 ký tự khác mà tôi nêu ra ở bảng trên.
Lỗi Đ của Functions.xla mà bạn phát hiện là lỗi tự động xuống dòng sau khi chuyển mã.

Đó là 1 trong nhiều lý do mà tôi không thể sửa Functions.xla: Lỗi không giống nhau.
Các lý do khác là:
- Add-in của Paulsteigel ứng dụng nhiều quá, code nhiều quá, tìm không thấy hết hàm đổi mã, chỉ thấy 2 biến lưu trữ 2 bảng mã ABC và Unicode
- Nếu tìm thấy, chưa chắc đã có thể sửa được, vì căn cứ vào 2 biến mà tôi tìm thấy, nếu thay thế 1-1 thì không thể xảy ra tình trạng dư 1 ký tự xuống dòng chr(10) sau chữ Đ. Nghĩa là thuật toán của Paul khác thuật toán của tôi. Mà khác thuật toán thì không dễ gì biết lỗi ở đâu để sửa, trừ khi của chính mình làm.
- Phong cách viết, lập trình, trình bày, ... của Paul cao siêu hơn tôi, (tôi viết đơn giản theo trình độ của tôi, để tôi đọc dễ hiểu hơn), nên đọc chưa chắc có hiểu, lấy gì mà tìm lỗi và sửa lỗi.

Bạn đọc topic này
http://www.giaiphapexcel.com/forum/...-dùng-chung-các-tiếp-cận-và-cơ-hội-phát-triển!

Sẽ thấy tôi cũng có tham gia thảo luận 1 vài bài, sau đó bỏ của chạy lấy người.

Cho nên, cởi chuông phải kiếm người cột chuông, bạn vào topic đó nhờ Paulsteigel là tác giả của Functions.xla, trình bày lỗi và nhờ bạn ấy sửa.
 
Ở nhà em có dùng phần Add_Ins hôm qua em Post nên em thấy nó rất ổn, nhưng đến cơ quan không hiểu sao nó ...tịt. Hôm qua tình cờ em theo dõi chủ đề chuyển Font chữ trên diễn đàn em có tập hợp một số tiện ích, em nhận thấy:
- AlltoUni của thầy dùng rất hay, bản thân em dùng thì em sẽ vào Go to bỏ lựa chọn các ô có công thức đi chuyển sẽ rất ngon lành, tuy nhiên mọi người trình độ excel không thạo lắm thì sẽ hơi khó khăn. Gần giống của thày có thêm Tien ích của thày Nguyễn Thanh Hải (Tiền Giang) gần giống của thày nhưng không giữ được chữ hoa khi chuyển đổi và cũng có đặc điểm là khi lựa chọn phải bỏ qua những ô có công thức.
- Các tiện ích nữa là tiện ích do thày Long (TVEXCEL01.xla) khắc phục được điểm giữ được công thức, tuy nhiên nó không giữ được chữ Hoa như chuyển đổi. Còn Functions thì gần hoàn hảo (trừ lỗi chữ Đ), vì Excel của em hơi...ếch nên em cứ tưởng nó giống lỗi thày đã khắc phục.
Thày ơi Tiện ích của Thày Long, em xin trích dẫn địa chỉ tại http://www.giaiphapexcel.com/forum/showthread.php?2738-C%C3%B4ng-c%E1%BB%A5-h%E1%BB%97-tr%E1%BB%A3-ti%E1%BA%BFng-Vi%E1%BB%87t-cho-Excel, thày có thể khắc phục điểm sau khi chuyển đổi (VntimeH sang Unicode mà vẫn giữ được chữ in) không ah?
 
Lần chỉnh sửa cuối:
Đa tạ, đa tạ các bác đã nhắc. Em xin lỗi về sự vô trách nhiệm của mình trong thời gian qua! Xin phép tải lên bản cập nhật mới nhất. Suốt mấy tháng gần đây em đi công tác nhiều quá nên không thể đưa bản cập nhật lên được. Tạm thời các bác có thể tải bản cập nhật từ link sau đây ạ. Hiện tại bản cập nhật chỉ sửa mỗi phần tự xuống dòng.
http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Functions.rar
Tài liệu hướng dẫn ở đây:
http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Manuals.rar
Về lỗi trên em xin giải thích như sau:
Do em dùng chuỗi thay thế trong một Nhãn của form chứa danh sách các chuỗi ký tự thay thế (để đỡ phải đưa chúng - những ký tự so sánh vào trong code) nên không để ý là nó tự thêm một ký tự xuống dòng tại cuối chuỗi nên khi chuyển đổi, tất cả các chữ Đ đều trả về Đ tương ứng ở bảng mã đích và một ký tự xuống dòng ạ.

Phần chuyển mã - thuật toán đoán mã sử dụng tính năng đoán loại trừ đang bị bế tắc do kết quả loại trừ quá khác biệt. Em thấy rằng có vẻ như ta đang bế tắc trong thiết kế thuật toán xử lý đoán mã tốt nhất. Do vậy, em nghĩ ta chỉ nên dùng cách tiếp cận đơn giản là đoán mã qua bộ phông chữ sử dụng thôi.
Ý kiến các bác thế nào ạ
 
Lần chỉnh sửa cuối:
Thày ơi Tiện ích của Thày Long, em xin trích dẫn địa chỉ tại http://www.giaiphapexcel.com/forum/showthread.php?2738-Công-cụ-hỗ-trợ-tiếng-Việt-cho-Excel, thày có thể khắc phục điểm sau khi chuyển đổi (VntimeH sang Unicode mà vẫn giữ được chữ in) không ah?

VnTime và VntimeH là 2 bảng mã khác nhau, phải lập ra 2 bảng mã cho mỗi ký tự, chứ không phải đơn giản là hoa và thường. Cùng 1 font .vntime cũng có cả hoa trong đó (đ và Đ, ấ và Ấ)

Vì cùng là chữ thường, nhưng đổi font H sẽ là hoa, nghĩa là font H và hoa font thường sẽ khác mã.

Thí dụ 1: thường và hoa khác mã:

Font .vntime, chữ ô thường mã 171, chữ Ô hoa là 164
Font .vntimeH, chữ Ô hoa ( không shift) mã 171 và Ô hoa thứ 2 (shift) có mã 164

Thí dụ 2: thường và hoa cùng mã:

Font .vntime, chữ á th­ường có mã 184 và không có Á hoa. Nhấn shift gõ Á cũng trở thành á (184)
Font .vntimeH, cả 2 chữ Á (shift) và Á (không shift) đều là 184.

Do đó, đối với tiện ích này, không phải sửa lỗi, mà là bổ sung nguyên 1 bảng mã.

vào Go to bỏ lựa chọn các ô có công thức đi chuyển sẽ rất ngon lành, tuy nhiên mọi người trình độ excel không thạo lắm thì sẽ hơi khó khăn.

Sao bạn không làm như bài trên tôi nói, thêm vào code 1 dòng lệnh cho VBA tự chọn vùng không chứa công thức?

Activesheet.Cells.SpecialCells(2).Select
 
Đa tạ, đa tạ các bác đã nhắc. Em xin lỗi về sự vô trách nhiệm của mình trong thời gian qua! Xin phép tải lên bản cập nhật mới nhất. Suốt mấy tháng gần đây em đi công tác nhiều quá nên không thể đưa bản cập nhật lên được. Tạm thời các bác có thể tải bản cập nhật từ link sau đây ạ. Hiện tại bản cập nhật chỉ sửa mỗi phần tự xuống dòng.
http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Functions.rar
Tài liệu hướng dẫn ở đây:
http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Manuals.rar
Về lỗi trên em xin giải thích như sau:
Do em dùng chuỗi thay thế trong một Nhãn của form chứa danh sách các chuỗi ký tự thay thế (để đỡ phải đưa chúng - những ký tự so sánh vào trong code) nên không để ý là nó tự thêm một ký tự xuống dòng tại cuối chuỗi nên khi chuyển đổi, tất cả các chữ Đ đều trả về Đ tương ứng ở bảng mã đích và một ký tự xuống dòng ạ.
Gia đình xin chân thành cảm ơn và thành thật xin lỗi.

PS: Thêm một tin vui nữa, em đang xây dựng thuật toán kiểm tra chính tả có thể sử dụng trong word và Excel sử dụng thuật toán có trong công cụ Aspell và Hunspell (viết cho Linux). Hy vọng 2-3 tuần nữa ta sẽ có một công cụ kiểm tra chính tả sơ khai.

Phần chuyển mã - thuật toán đoán mã sử dụng tính năng đoán loại trừ đang bị bế tắc do kết quả loại trừ quá khác biệt. Em thấy rằng có vẻ như ta đang bế tắc trong thiết kế thuật toán xử lý đoán mã tốt nhất. Do vậy, em nghĩ ta chỉ nên dùng cách tiếp cận đơn giản là đoán mã qua bộ phông chữ sử dụng thôi.
Ý kiến các bác thế nào ạ
Thày xem lại hộ giúp em, em đã tải cái mới nhất theo địa chỉ của thày nhưng lỗi chữ Đ vẫn chưa được thày ah (em ví dụ chữ Đang thì nó tách thằng Đ dòng trên còn ang lại ở dòng dưới)
 
VnTime và VntimeH là 2 bảng mã khác nhau, phải lập ra 2 bảng mã cho mỗi ký tự, chứ không phải đơn giản là hoa và thường. Cùng 1 font .vntime cũng có cả hoa trong đó (đ và Đ, ấ và Ấ)

Vì cùng là chữ thường, nhưng đổi font H sẽ là hoa, nghĩa là font H và hoa font thường sẽ khác mã.

Thí dụ 1: thường và hoa khác mã:

Font .vntime, chữ ô thường mã 171, chữ Ô hoa là 164
Font .vntimeH, chữ Ô hoa ( không shift) mã 171 và Ô hoa thứ 2 (shift) có mã 164

Thí dụ 2: thường và hoa cùng mã:

Font .vntime, chữ á th­ường có mã 184 và không có Á hoa. Nhấn shift gõ Á cũng trở thành á (184)
Font .vntimeH, cả 2 chữ Á (shift) và Á (không shift) đều là 184.

Do đó, đối với tiện ích này, không phải sửa lỗi, mà là bổ sung nguyên 1 bảng mã.



Sao bạn không làm như bài trên tôi nói, thêm vào code 1 dòng lệnh cho VBA tự chọn vùng không chứa công thức?

Activesheet.Cells.SpecialCells(2).Select
Mong thày thông cảm cho em, em dự kiến học VBA từ trong Tết, do công việc cứ bộn bề suốt ngày không dứt ra được nên em mới bắt đầu đọc được chương đầu tiên sách của thày Hướng, thao tác mở đọc, sửa Code của đuôi Xla (Add_Ins) như thế nào em...chưa biết. Thày sửa giúp em cái vụ này với, em xin cảm ơn.
 
Lần chỉnh sửa cuối:
Mong thày thông cảm cho em, em dự kiến học VBA từ trong Tết, do công việc cứ bộn bề suốt ngày không dứt ra được nên em mới bắt đầu đọc được chương đầu tiên sách của thày Hướng, thao tác mở đọc Code của đuôi Xla (Add_Ins) như thế nào em...chưa biết. Thày sửa giúp em cái vụ này với, em xin cảm ơn.

Đọc code xla thì Alt F11 xem code như xls vậy đó.
Thôi sửa luôn cho chú mình. Nhấn phím tắt, Chuyển font cả sheet luôn, mà không mất công thức, sướng nhé.
 

File đính kèm

1. Phản hồi về ý kiến của bạn Đại
Bạn Đại ơi, tôi nghĩ bạn chưa bỏ cái function.xla cũ nên mới như vậy đấy, bạn cần bỏ cái cũ ra rồi mới cài lại bản mới vào thì chức năng này mới hoạt động được ạ. Nếu vẫn không giải quyết được, có thể phần sửa chữa vẫn chưa triệt để. Nếu có thể bạn gửi cho tôi tập tin bạn đang gặp lỗi để tôi nghiên cứu nhé.
Địa chỉ mail của tôi là ngocdd@sfdp.net.

2. Bình luận thêm về bài của bác PTM0412
[[VnTime và VntimeH là 2 bảng mã khác nhau, phải lập ra 2 bảng mã cho mỗi ký tự, chứ không phải đơn giản là hoa và thường. Cùng 1 font .vntime cũng có cả hoa trong đó (đ và Đ, ấ và Ấ)]]
Theo em chỗ này không ổn ạ, thực ra bảng mã là bảng mã còn phông chữ là phông chữ. Tiếng Viêt của chúng ta có 134 nguyên âm có dấu, cộng với các chữ cái thường và hoa thì trên thực tế đối với bảng mã ASCII có chỗ cho 255 ký tự khi trừ đi hàng loạt ký tự điều khiển thì có vẻ thiếu để đặt mã tiếng Việt để đảm bảo cả nguyên âm thường và nguyên âm có dấu dạng chữ Hoa.​
Chính vì thế người ta, ngoài việc xoay sở tiết kiệm hầu hết các nguyên âm có mũ dạng chữ Hoa, người ta đành phải sử dụng lại một số nguyên âm có dấu dạng thường và dùng thêm công cụ gọi là phông chữ.​
Trong trường hợp bảng mã TCVN, người ta dùng bộ phông Véc tơ trong đó cách hiển thị có sự tương đồng như sau:​
Chữ c thường và C hoa có cách thiết kế hiển thị đầu ra giống nhau và giống chữ C hoa​
Các nguyên âm có dấu dạng thường cũng được vẽ thành nguyên âm có dấu dạng hoa.​
Đây cũng chính là điểm mạnh của bộ phông véc tơ nên người ta hay ứng dụng trong vẽ mã vạch hoặc các dấu hiệu nhận dạng đặc biệt.​
Trước đây tôi cũng đã từng dùng bộ công cụ sửa phông chữ đơn giản như Softy để vẽ lại cách hiển thị một số dấu *,@#$ thành hình ngôi sao năm cánh để ứng dụng trong máy đánh số khung số máy.​
Điều này cũng được ứng dụng trong bộ phông của bảng mã VNI​
Hãy quan sát ví dụ:​
Nếu dùng bộ gõ VNI, chữ “Đèn đường rạng ngời sẽ có dạng”: “Đeøn ñöôøng raïng ngôøi” khi sử dụng phông chữ Arial nhưng khi sử dụng bộ phông VNI thì hiển thị đúng. Lý do trên là, khi thiết bộ phông chữ cho bảng mã VNI, với các ký tự đánh dấu ví dụ dấu huyền “ø” thì người ta cố ý thiết kế để dấu hiển thị lùi 1 ký tự so với hiện tại và khi kết hợp với các nguyên âm, dường như khi hiển thị ra nó là 1 ký tự.​
Cách thiết kế bộ mã VNI rất khoa học, thực sự tôi thấy tốt hơn cách thiết kế TCVN (dạng mì ăn liền ít tính đến các nghiệp vụ xử lý văn bản), tuy nhiên bộ mã VNI cũng có một số yếu điểm khi thể hiện chữ ở các chế độ nhìn khác nhau vì nhóm thiết kế phông chưa triệt để xử lý được vấn đề nở rộng tương đối của phông chữ nên ở một số trường hợp dấu hơi bị tách so với nguyên âm và trông không đẹp lắm.​
Như vậy, khi thực hiện phép chuyển từ VNI sang UNICODE và ngược lại người ta không có vấn đề mấy về chữ hoa, chữ thường.​
Trái lại, do cách xử lý và thiết kế bộ mã TCVN là sử dụng phông chữ và có sự trùng lắp giữa ký tự làm nguyên âm có dấu ở dạng thường và Hoa nên khi chuyển mã người ta hay gặp vấn đề:​
Từ chữ hoa TCVN sang UNICODE thì không sao (sử dụng thuật toán dùng phông chữ hoa để chuyển hết nguyên âm có dấu sang UNICODE dạng chữ hoa).​
Nhưng khi chuyển từ chữ HOA UNICODE sang chữ hoa TCVN thì có vấn đề vì với Unicode người ta không có biện pháp nhận dạng chuỗi đang dùng là chữ hoa hay thường ngoài việc phải sử dụng thuật toán kiểm tra từng nguyên âm có dấu để quyết định chuỗi là chữ hoa hay thường. Chẳng hạn nếu toàn chuỗi là ĐÈN ĐƯỜNG RẠNG NGỜI thì qua việc dò từng chữ rồi kiểm tra nó có phải là ở dạng chữ hoa không người ta sẽ chọn phông sẽ sử dụng là phông chữ hoa.​
Nhưng nếu trong trường hợp người dùng nhấn mạnh bằng cách hay dùng như sau: “Đèn ĐƯỜNG rạng ngời” thì thuật toán đoán chế độ hoa thường này vô dụng nếu không chỉ còn cách chuyển mã từng từ một, và nếu thế thì tốc độ là vô cùng chậm mà độ chính xác sẽ chẳng cải thiện là bao mà kết quả vẫn rất có thể là “ĐèN ĐườNG RạNG NGờI”​
Em xin có một vài đóng góp như thế để làm rõ thêm phần giải thích của bác ptm0210​
 
Lần chỉnh sửa cuối:
Cám ơn Paul về lời nhận xét và bài giải thích bảng mã và font.

Thực ra tôi có biết về những cái này nhưng không rõ bằng Paul, người nắm vững loại font (vectơ gì gì đó).
Trong khi tiến hành làm cái công cụ AlltoUni này, tôi đã bị 1 số trở ngại khi không thể dùng 1 biến để mô tả cả 2 loại font thường và hoa. Thế là tôi phải tách ra 2 function con cho 2 loại font này, mỗi function dùng 1 biến mảng khác nhau từng thành phần một cho mỗi font.

Chính xác, 2 biến này phải gọi là Bảng mô tả mã chứ không phải bảng mã. Trong bài trên tôi đã ghi không rõ ràng. Xin ghi nhận.

Bảng mô tả này liệt kê 1 bên là các ký tự nguyên âm có dấu và chữ đ, Đ của bảng mã font .vn, 1 bên là các mã tương ứng của Unicode.
Rõ ràng là với thuật toán của tôi thì phải tạo 2 bảng mô tả cho 2 loại font thường và font hoa.

Thí dụ: Cùng 1 ký tự code 169 (©), khi chuyển sang Unicode thì font Hoa phải thành ký tự có code 194 (Â), font thường phải chuyển thành ký tự có code 226 (â).


Đồng thời, bảng mô tả font hoa còn phải liệt kê cả những trường hợp người dùng nhấn shift (hoặc capslock) và không nhấn shift (capslock). Đó là 6 ký tự mà tôi liệt kê phần trên.

Tái bút:

Dù gì mình cũng ghét bảng mã TCVN, vector vectiếc gì không biết, muốn viết hoa nguyên từ là phải đổi font. Thậm chí nếu tôi muốn đánh câu văn bản sau:

Thị Nở kêu lên: Á đau!

hoặc: Ngân hàng Thương mại Á Châu

thì chữ Á phải định dạng riêng bằng font .vnH, đó là 1 cực hình trong excel.

Trong khi các bảng mã khác chỉ cần nhấn shift hoặc capslock!
 
Lần chỉnh sửa cuối:
1. Phản hồi về ý kiến của bạn Đại



Bạn Đại ơi, tôi nghĩ bạn chưa bỏ cái function.xla cũ nên mới như vậy đấy, bạn cần bỏ cái cũ ra rồi mới cài lại bản mới vào thì chức năng này mới hoạt động được ạ. Nếu vẫn không giải quyết được, có thể phần sửa chữa vẫn chưa triệt để. Nếu có thể bạn gửi cho tôi tập tin bạn đang gặp lỗi để tôi nghiên cứu nhé.
Địa chỉ mail của tôi là ngocdd@sfdp.net.​

Em làm theo lời thày em đã gỡ bỏ hoàn toàn cái cũ nhưng vẫn bị lỗi, em gửi 2 file gốc (trước khi chuyển đổi) và file đã chuyển font cho thày dễ quan sát ah.
 

File đính kèm

Thành thật xin lỗi bạn Đại vì giờ tôi mới có thời gian trả lời bài viết. Tôi đã kiểm tra công cụ và lỗi nằm ở phần định dạng chuỗi Unicode đầu vào. Giống như tôi đã phân tích lần trước, tôi vô tình để có một dấu xuống dòng ở cuối chuỗi sát chữ Đ nên khi chuyển đổi công cụ thay thế tất cả những chữ Đ trong TCVN thành chữ Đ Unicode kèm theo dấu xuống dòng. Lỗi này có từ khi tôi bắt đầu chuyển sang dùng chuỗi đầu vào trong form lưu trữ để tiện dụng.
Bạn có thể sửa như thế này nhé:
+ Bấm Alt+F11 (Bấm cả phím Alt và phím F11 cùng lúc)
+ Trong màn hình sửa code sẽ hiện ra, bạn chọn dấu cộng ứng với Dự án (Project) Functions(Functions.xla) tại cây dự án bên tay trái màn hình.
+ Chọn dấu cộng Forms
+ Nhấn kép vào đối tượng frmResources
+ Chọn nhãn (Label) lb_Unicode
+ Nhấn chuột thêm một lần chuột đơn vào nhãn này và nhấn Ctrl+End để về cuối nhãn.
+ Nhấn nút xóa Backspace cho đến khi gặp chữ Đ
+ Nhấn Ctrl+S để lưu lại
+ Excel sẽ thông báo là mất chữ ký của ứng dụng, không sao cả bạn có thể sử dụng công cụ một cách bình thường từ bây giờ.
Hoặc bạn có thể tải về từ liên kết tôi gửi trong mấy bài trước nhé.
Xin chân thành xin lỗi bạn
 
Thành thật xin lỗi bạn Đại vì giờ tôi mới có thời gian trả lời bài viết. Tôi đã kiểm tra công cụ và lỗi nằm ở phần định dạng chuỗi Unicode đầu vào. Giống như tôi đã phân tích lần trước, tôi vô tình để có một dấu xuống dòng ở cuối chuỗi sát chữ Đ nên khi chuyển đổi công cụ thay thế tất cả những chữ Đ trong TCVN thành chữ Đ Unicode kèm theo dấu xuống dòng. Lỗi này có từ khi tôi bắt đầu chuyển sang dùng chuỗi đầu vào trong form lưu trữ để tiện dụng.
Bạn có thể sửa như thế này nhé:
+ Bấm Alt+F11 (Bấm cả phím Alt và phím F11 cùng lúc)
+ Trong màn hình sửa code sẽ hiện ra, bạn chọn dấu cộng ứng với Dự án (Project) Functions(Functions.xla) tại cây dự án bên tay trái màn hình.
+ Chọn dấu cộng Forms
+ Nhấn kép vào đối tượng frmResources
+ Chọn nhãn (Label) lb_Unicode
+ Nhấn chuột thêm một lần chuột đơn vào nhãn này và nhấn Ctrl+End để về cuối nhãn.
+ Nhấn nút xóa Backspace cho đến khi gặp chữ Đ
+ Nhấn Ctrl+S để lưu lại
+ Excel sẽ thông báo là mất chữ ký của ứng dụng, không sao cả bạn có thể sử dụng công cụ một cách bình thường từ bây giờ.
Hoặc bạn có thể tải về từ liên kết tôi gửi trong mấy bài trước nhé.
Xin chân thành xin lỗi bạn

Em chuyển rất OK rồi, cảm ơn thày nhiều , tuy vậy hình như chức năng chuyển font Times New Romans sang chữ HOA nó bị lỗi (chuyển chữ HOA chỉ áp dụng được với TCVN3 thôi) phải không ah?
 
Đúng rồi bạn ạ, chức năng chuyển từ Unicode (chữ hoa) sang TCVN chữ thường không làm việc tốt vì mấy nguyên nhân mình đã giải thích từ trước, tuy nhiên vẫn có thể xử lý để giải quyết tình huống được. Về cái này mình sẽ cố gắng giải quyết sau.
Xin chân thành cảm ơn mọi người và xin lỗi vì đã làm tốn giấy mực của tất cả ạ.
PS: Mình không phải là thầy giáo nên đừng gọi là thầy bạn Đại nhé - Để làm thầy khó lắm! Hic!
 
Đã cập nhật thêm một số sửa đổi nhỏ...

Theo ý kiến của bạn Đại, mình đã đưa tính năng tự động kiểm tra và chuyển sang chữ hoa đối với các phép chuyển từ UNICODE/VNI sang TCVN.
Phần này sử dụng thuật toán dự đoán đếm số ký tự hoa trong chuỗi chuyển đổi, nếu số ký tự =>2 thì sẽ mặc định coi đây là chuỗi dùng kiểu chữ hoa.
Tính năng này không hoàn toàn tốt trong mọi trường hợp nhưng có thể sử dụng được đối với đa số phép chuyển thông thường:

Ví dụ: Các tình huống sau đây thuật toán sẽ cho là chuỗi cần áp dụng chữ Hoa:
"ĐàM" - Một từ
"ĐườnG Chúng ta đi" hoặc Đường chúng tA Đến nơi" - nhiều từ và có trường hợp 2 ký tự thuộc 2 từ cách nhau khoảng trắng có ký tự dạng chữ Hoa;
Các trường hợp sau không có thay đổi
"Đường CHÚNG ta đi", "ĐườNg CHúnG ta đi" - hơi củ chuối đúng không.

Rất mong mọi người cho thêm ý kiến nhé.
Bạn có thể tải về từ địa chỉ này.
Xin cảm ơn!

Nội dung thuật toán như sau:
PHP:
Private Function CheckUpperCase(theTxt As String) As Boolean
    ' Sửa lại ngày 27 Feb 2011 - cách mới
    ' Cách tiếp cận: tìm ký tự hoa bất kỳ ngay trước và sau ký tự trắng
    
    Dim stCounter As Long, i As Long, InputString As String
    ' remove starting and trailing spaces
    InputString = LTrim(RTrim(theTxt))
    
    On Error GoTo errHandler
    i = InStr(InputString, " ")
    If i > 0 Then
        ' Nâng biến đếm cho trường hợp ký tự cuối cùng là chữ hoa
        If Right(InputString, 1) Like "[A-Z]" Then stCounter = 1
        
        ' Kiểm tra chữ ngay trước dấu trắng
        While stCounter < 2 And i > 0
            If Mid(InputString, i - 1, 1) Like "[A-Z]" Then
                ' Chỉ kiểm tra ký tự sau dấu trắng nếu thỏa mãn điều kiện
                stCounter = stCounter + 1
                If Mid(InputString, i + 1, 1) = UCase(Mid(InputString, i + 1, 1)) Then stCounter = stCounter + 1
            End If
            
            If stCounter >= 2 Then
                CheckUpperCase = True
            Else
                i = InStr(i + 1, InputString, " ")
            End If
        Wend
    Else
        ' Không có dấu trắng nào trong chuỗi tham số, bây giờ áp dụng luật đếm ký tự dạng chữ Hoa
        For i = Len(InputString) To 1 Step -1
            If Mid(InputString, i, 1) = UCase(Mid(InputString, i, 1)) Then stCounter = stCounter + 1
            If stCounter = 2 Then
                CheckUpperCase = True
                Exit For
            End If
        Next
    End If
errHandler:
End Function
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom