PDA

View Full Version : Làm sao chuyển font từ VntimH sang Times New Roma vấn giữ được chữ IN



Dauthivan
22-02-11, 11:31 AM
Em có mấy Add _ Ins tuy nhiên khi chuyển font chữ từ (Vntime hoặc VntimeH) sang Times New Roman thì chữ IN bị biến mất sang chữ thưởng. Có bác nào chuyển font mà khắc phục được nhược điểm này không cho em xin, em đang rất cần. Xin chân thành cảm ơn

Phanhanhdai
22-02-11, 01:08 PM
Bạn thử xem phần mềm chuyển đổi của bác handung107 (http://www.giaiphapexcel.com/forum/member.php?2-handung107) tại địa chỉ http://www.giaiphapexcel.com/forum/showthread.php?117-Convert-Font-Add-in-của-OverAC , tôi thấy nó rất tiện lợi và hay

nghiaphuc
22-02-11, 01:10 PM
Em có mấy Add _ Ins tuy nhiên khi chuyển font chữ từ (Vntime hoặc VntimeH) sang Times New Roman thì chữ IN bị biến mất sang chữ thưởng. Có bác nào chuyển font mà khắc phục được nhược điểm này không cho em xin, em đang rất cần. Xin chân thành cảm ơn
Giải pháp tạm thời: bạn dùng chức năng chuyển mã của Unikey đi (nhớ copy 1 bản dự phòng trước khi làm theo các bước sau nhé)
- Copy dữ liệu nguồn.
- Nhấn Ctrl+Shift+F6
- Chọn bảng mã nguồn (TCVN-3) và đích (Unicode)
- Chọn Sang chữ hoa tại mục Lựa chọn
- Chọn Chuyển mã Clipboard
- Nhấn nút Chuyển mã.
- Dán đè lên dữ liệu nguồn và chọn lại font.

Dauthivan
22-02-11, 01:20 PM
Bạn thử xem phần mềm chuyển đổi của bác handung107 (http://www.giaiphapexcel.com/forum/member.php?2-handung107) tại địa chỉ http://www.giaiphapexcel.com/forum/showthread.php?117-Convert-Font-Add-in-của-OverAC , tôi thấy nó rất tiện lợi và hay
Em đã tải xuống rồi nhưng nó vẫn bị lỗi font khi em thực hiện chuyển đổi (chọn vùng chuyển sau đó nhấn Ctrl+Q), mục đích của em là chữ thường sau khi chuyển đổi vẫn là chữ thường, chữ hoa (VntimH) sau khi chuyển đổi sang Times New Roman nó vẫn là chữ hoa, tuy nhiên em thấy VnTimeH khi chuyển đổi vẫn có nhược điểm lại biến thành chữ thường.

Dauthivan
22-02-11, 01:24 PM
Em thấy có phần mềm UConvert.exe của Công ty An Nam chuyển rất chuẩn, em rất thích phần mềm này không cần mở file gì cả khi chuyển đổi giữ nguyên chữ IN, chữ thường. Đáng tiếc nó chỉ thực hiện trong Word mà không thực hiện được trong Excel

ptm0412
22-02-11, 01:26 PM
Bạn hỏi cho word hay excel? Có 1 topic hỏi cho word mà không nói rõ, tôi đã trả lời bằng hàm cho excel, và bị quê 1 cục:
http://www.giaiphapexcel.com/forum/showthread.php?37988-Chuy%E1%BB%83n-font-cho-v%C4%83n-b%E1%BA%A3n-l%E1%BA%ABn-l%E1%BB%99n-c%E1%BA%A3-Vntime-v%C3%A0-Times-New-Roman-v%E1%BB%81-1-lo%E1%BA%A1i

Nếu dùng cho excel thì lấy hàm AlltoUni() trong topic này:
http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-%E1%BB%A9ng-d%E1%BB%A5ng-G%C3%B5-TCVN3-sheet-n%C3%A0y-t%E1%BB%B1-%C4%91%E1%BB%99ng-c%E1%BA%ADp-nh%E1%BA%ADt-Unicode-sheet-kia.&p=212481#post212481
AlltoUni() chỉ có 1 tham số, dùng chung cho mọi font .vn, .vnH, Vni-, và chuyể sang Unicode, chữ in còn nguyên chữ in.

Dauthivan
22-02-11, 01:53 PM
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

Dauthivan
22-02-11, 02:02 PM
Bạn hỏi cho word hay excel? Có 1 topic hỏi cho word mà không nói rõ, tôi đã trả lời bằng hàm cho excel, và bị quê 1 cục:
http://www.giaiphapexcel.com/forum/showthread.php?37988-Chuy%E1%BB%83n-font-cho-v%C4%83n-b%E1%BA%A3n-l%E1%BA%ABn-l%E1%BB%99n-c%E1%BA%A3-Vntime-v%C3%A0-Times-New-Roman-v%E1%BB%81-1-lo%E1%BA%A1i

Nếu dùng cho excel thì lấy hàm AlltoUni() trong topic này:
http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-%E1%BB%A9ng-d%E1%BB%A5ng-G%C3%B5-TCVN3-sheet-n%C3%A0y-t%E1%BB%B1-%C4%91%E1%BB%99ng-c%E1%BA%ADp-nh%E1%BA%ADt-Unicode-sheet-kia.&p=212481#post212481
AlltoUni() chỉ có 1 tham số, dùng chung cho mọi font .vn, .vnH, Vni-, và chuyể sang Unicode, chữ in còn nguyên chữ in.

Em cứ tưởng là Ok rồi, nhưng phần mềm Functions.xla nó vẫn bị lỗi chữ a khi chuyển đổi, những ô có công thức sử dụng như dùng hàm Concatenate thì không chuyển đổi được, các chức năng khác khá thuận lợi, bác nào là tác giả phần mềm này giúp em với.

nghiaphuc
22-02-11, 02:11 PM
Em cứ tưởng là Ok rồi, nhưng phần mềm Functions.xla nó vẫn bị lỗi chữ a khi chuyển đổi, những ô có công thức sử dụng như dùng hàm Concatenate thì không chuyển đổi được, các chức năng khác khá thuận lợi, bác nào là tác giả phần mềm này giúp em với.
Tác giả của Addin Functions.xla có lên tiếng trong link thứ 2 của thầy ptm0412 đó bạn. Đây nè:
http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-ứng-dụng-Gõ-TCVN3-sheet-này-tự-động-cập-nhật-Unicode-sheet-kia.&p=212522#post212522

Dauthivan
22-02-11, 02:17 PM
Tác giả của Addin Functions.xla có lên tiếng trong link thứ 2 của thầy ptm0412 đó bạn. Đây nè:
http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-ứng-dụng-Gõ-TCVN3-sheet-này-tự-động-cập-nhật-Unicode-sheet-kia.&p=212522#post212522
Thày ơi, thày cho em hỏi em có dùng bản AlltoUni() của thày về thì rất là chuẩn không bị lỗi, tuy nhiên lại phải dùng hàm cho từng ô liền. Tuy vậy, em muốn nó chuyển tự động cho cả vùng như Fution mà thày đã viết? Thày giúp em với ah, đa tạ thày.

Phanhanhdai
22-02-11, 03:53 PM
Theo tôi, bạn không nên cầu toàn quá, bạn có thể sử dụng của thày Nguyễn Thanh Hải tại địa chỉ http://www.giaiphapexcel.com/forum/showthread.php?33844-Giới-thiệu-TIỆN-ÍCH-EXCEL-của-thầy-Nguyễn-Thanh-Hải-(Tiền-Giang), nếu ô nào biến thành chữ thường bạn chọn chức năng biến thành chữ hoa là xong bởi suy cho cùng những ô ấy không nhiều, có được như vậy là tốt lắm rồi, tôi chỉ băn khoăn ước gì trong Word có được tiện ích tương tự như vậy, mỗi khi chuyển từ chữ thường sang chữ hoa tôi đều phải xoá đị đánh lại (trong cùng một tiện ích).

ptm0412
22-02-11, 04:07 PM
Tác giả của Addin Functions.xla có lên tiếng trong link thứ 2 của thầy ptm0412 đó bạn. Đây nè:
http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-ứng-dụng-Gõ-TCVN3-sheet-này-tự-động-cập-nhật-Unicode-sheet-kia.&p=212522#post212522 (http://www.giaiphapexcel.com/forum/showthread.php?31789-Code-%E1%BB%A9ng-d%E1%BB%A5ng-G%C3%B5-TCVN3-sheet-n%C3%A0y-t%E1%BB%B1-%C4%91%E1%BB%99ng-c%E1%BA%ADp-nh%E1%BA%ADt-Unicode-sheet-kia.&p=212522#post212522)
Tác giả Function.xla là Paulstiegel, chuyên gia lập trình rất cao siêu.

Thày ơi, thày cho em hỏi em có dùng bản AlltoUni() của thày về thì rất là chuẩn không bị lỗi, tuy nhiên lại phải dùng hàm cho từng ô liền. Tuy vậy, em muốn nó chuyển tự động cho cả vùng như Fution mà thày đã viết? Thày giúp em với ah, đa tạ thày.

Chép code sau vào module và gán phím tắt:


Sub abc()
Dim Arr
Dim iRows, iCols
Dim i As Long, j As Long
iRows = Selection.Rows.Count
iCols = Selection.Columns.Count
ReDim Arr(iRows, iCols)
For i = 1 To iRows
For j = 1 To iCols
Arr(i, j) = AllToUni(Selection(i, j))
Next
Next
Selection = Arr
Selection.Font.Name = "Arial"
End SubChọn 1 vùng đơn (không dùng ctrol chọn nhiều vùng rời rạc), rồi nhấn phím tắt.
Ghi chú: Như tất cả các ứng dụng chuyển mã, các công thức bị mất, thay vào bằng giá trị. Cho nên chỉ nên dùng cho dữ liệu text.

Dữ liệu số thì chỉ cần đổi font, đúng không?

Cải tiến cho vùng chọn không liên tục (nhấn Ctrl chọn nhiều vùng không liên tục)

Sub abc()
Dim Arr, Area1 As Range
Dim iRows, iCols
Dim i As Long, j As Long
For Each Area1 In Selection.Areas
iRows = Area1.Rows.Count
iCols = Area1.Columns.Count
ReDim Arr(iRows, iCols)
For i = 1 To iRows
For j = 1 To iCols
Arr(i, j) = AllToUni(Area1(i, j))
Next
Next
Range(Area1.Address) = Arr
Next
Selection.Font.Name = "Arial"
End SubPhím tăt là Ctrl Shift W

Phanhanhdai
22-02-11, 09:44 PM
Về cơ bản code chuyển đổi rât tốt, nhưng hình như còn lỗi chữ Đ hoa là chưa được thày ah

Tiger62
22-02-11, 09:50 PM
Phần mềm UConvert.exe của Công ty An Nam viết cho ngành thuế tôi thấy dùng rất tốt. Nhiều file excel, word có nhiều fomat nhưng tôi chưa gặp lỗi nào khi chuyển.

Phanhanhdai
22-02-11, 10:52 PM
Em vừa tách tìm được đượ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.

ptm0412
22-02-11, 11:15 PM
Cảm ơn thày, công việc của em là quản lý dự toán XD, nhiều đơn vị nhà thầu gửi đến gồm rất nhiều font, việc giữ lại các công thức là quan trọng, các phần mềm em sưu tầm được đều giải quyết giữ được công thức, tuy nhiên mỗi cái nó lại có lỗi nhỏ riêng thế mới bực chứ. Tất nhiên, có vậy là tốt lắm rồi, (trừ khi công việc quá nhiều, khối lượng lớn thì kể ra cũng hơi mệt).

Việc giữ lại công thức đối với AlltoUni rất dễ dàng: chọn toàn bảng tính, rồi chọn tiếp special cells- Constant, nhấn tiếp phím tắt để chạy code. Những ô chứa công thức đâu có chọn đâu mà lo bị mất công thức? AlltoUni cũng không đụng chạm đến định dạng màu, canh trái phải, border, merge cell, số, ngày, ... kể cả wrap text
Còn lỗi chữ Đ hoa, là do khi đánh font .vntimeH mà vẫn nhấn giữ shift hoặc capslock, mà character code của Đ trong bảng mã này, 1 shift, 1 không, thì khác nhau: § và ® dù cho cùng hiển thị Đ.
Tôi ghét font của bảng mã ABC ở chỗ đó: viết hoa nguyên từ phải đổi font mà không được nhấn shift hoặc capslock.

Phanhanhdai
22-02-11, 11:19 PM
Cảm ơn thày nhiều, thày thử dùng cái em vừa tải lên xem thế nào thày nhé.

Tiếp theo em xin gửi mọi người Add_Ins trong Word, mọi người dùng nó với Word2003 độ tương thích rất tốt.

ptm0412
23-02-11, 12:39 AM
Cảm ơn thày nhiều, thày thử dùng cái em vừa tải lên xem thế nào thày nhé.

Ghét nhất cái này:
- Protect code VBA (có pass), không cho xem thì không biết lỗi do đâu, muốn xem cũng không được. Cho pass cũng vậy, muốn xem phải gỡ pass. Mà nếu lỗi ngay khi load menu thì có cho debug đâu mà xem? Muốn gỡ pass thì phải disable macro, mà disable macro thì đâu có lỗi mà xuất hiện?
- Thoát ra không gỡ bỏ menu, kể cả khi đã gỡ add-ins
- Vẫn còn cái tool bar đáng ghét

Về sử dụng:
Đối với lệnh chuyển chữ hoa thành chữ thường: thực chất là đổi font từ .vnxxH thành .vnxxx
- chữ I hoa, chuyển xong vẫn còn I hoa
- Nếu khi đánh, người ta đã nhấn capslock hoặc shift, thì những chữ đó không được đổi.

Tôi đang sửa AlltoUni để bẫy những chữ nhấn capslock khi đánh .vntimeH

Đã bẫy lỗi nhấn capslock khi gõ đối với font .vnxxH:
Đối với font hoa của mã ABC, có những chữ sau đây hiển thị như nhau dù cho nhấn shift hoặc capslock hay không:

Có capslock|Không capslock|Hiển thị|
§|®|Đ|
¢|©|Â|
£|ª|Ê|
¤|«|Ô|
¦|­-|Ư|
¥|¬|Ơ|

bắt thêm mấy chữ này là xong.

Để bảo toàn công thức, cứ chọn toàn bảng tính, sau đó chọn special cells constant, rồi chạy code.

Phanhanhdai
23-02-11, 06:13 AM
Em đã sử dụng cái thày sửa rồi, tuy nhiên nó còn một lỗi tiêu đề sau khi chuyển đổi nó không thể nào hiện ra theo chế độ Center Cross Section (không căn nó ra giữa bảng được), thày thử xem lại giúp em thày nhé.

ptm0412
23-02-11, 07:41 AM
AlltoUni bảo đảm không can thiệp vào format:

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

58949

Sau khi chuyển đổi:

58950

Phanhanhdai
23-02-11, 07:52 AM
AlltoUni bảo đảm không can thiệp vào format:

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

58949

Sau khi chuyển đổi:

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ì).

ptm0412
23-02-11, 08:15 AM
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ế.

Dauthivan
23-02-11, 08:43 AM
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?

Phanhanhdai
23-02-11, 10:59 AM
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.

ptm0412
23-02-11, 02:46 PM
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/showthread.php?31933-C%C3%B4ng-c%E1%BB%A5-chuy%E1%BB%83n-m%C3%A3-d%C3%B9ng-chung-c%C3%A1c-ti%E1%BA%BFp-c%E1%BA%ADn-v%C3%A0-c%C6%A1-h%E1%BB%99i-ph%C3%A1t-tri%E1%BB%83n!

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.

Phanhanhdai
23-02-11, 04:01 PM
Ở 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?

paulsteigel
23-02-11, 10:40 PM
Đ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 ạ

ptm0412
23-02-11, 10:50 PM
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?

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

Phanhanhdai
23-02-11, 11:01 PM
Đ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)

Phanhanhdai
23-02-11, 11:04 PM
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.

ptm0412
23-02-11, 11:48 PM
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é.

paulsteigel
24-02-11, 07:22 AM
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

ptm0412
24-02-11, 08:58 AM
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!

Phanhanhdai
24-02-11, 09:00 AM
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.

paulsteigel
24-02-11, 08:34 PM
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

Phanhanhdai
24-02-11, 11:11 PM
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?

paulsteigel
25-02-11, 08:56 AM
Đú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!

dailykem
25-02-11, 09:10 AM
http://www.mediafire.com/?03wec3kgj056103
bác thử dùng phần mềm chuyển fonts sang unicode của Cty Nam An xem sao
mình thử dùng thấy tốt phết đấy
bác tham khảo xem sao

paulsteigel
25-02-11, 11:36 PM
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 (http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Functions.rar).
Xin cảm ơn!

Nội dung thuật toán như sau:

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