Làm sao để LIST VIEW hiển thị Font UNICODE

Liên hệ QC

othanhquango

Thành viên hoạt động
Tham gia
6/3/09
Bài viết
138
Được thích
7
Mình có xem 1 số bài trên diễn đàn nói về vấn đề này nhưng chưa hiểu lắm. Nhờ các bạn chỉ giúp mình cách hiện thi font trong list view cho đúng.
 

File đính kèm

Mình có xem 1 số bài trên diễn đàn nói về vấn đề này nhưng chưa hiểu lắm. Nhờ các bạn chỉ giúp mình cách hiện thi font trong list view cho đúng.

Làm sao để LIST VIEW hiển thị Font UNICODE?

Tôi chưa xem File của bạn, nhưng với ListView thì không hiển thị Font Tiếng Việt có dấu bằng font UniCode đâu nhé! Chỉ có chuyển (convert) từ Font này sang font khác nó mới hiển thị được thôi, như font VNI, ABC chẳng hạn.
 
Upvote 0
Thì ý của mình là hiển thị tiếng Việt có đấu. Còn cách làm thế nào cũng được, miễn sao mang qua máy không có font đó vẫn hiển thị tốt là ok.
 
Upvote 0
Trước hết, tại form FRM_DANHMUCHANG, bạn chọn vào ListView LVDMH rồi chọn trong Properties > Font > VNI-Times (hay VNI-Helve gì đó), chọn cỡ font gì đó.

Kế tiếp, bạn Insert 1 Module, bạn copy code dưới đây vào trong Module đó:

PHP:
Option Explicit
Function UNICODEtoVNI(vnstr As String)
Dim c As String, i As Long
   For i = 1 To Len(vnstr)
      c = Mid(vnstr, i, 1)
      Select Case c
         Case ChrW$(97): c = "a"
         Case ChrW$(225): c = "aù"
         Case ChrW$(224): c = "aø"
         Case ChrW$(7843): c = "aû"
         Case ChrW$(227): c = "aõ"
         Case ChrW$(7841): c = "aï"
         Case ChrW$(259): c = "aê"
         Case ChrW$(7855): c = "aé"
         Case ChrW$(7857): c = "aè"
         Case ChrW$(7859): c = "aú"
         Case ChrW$(7861): c = "aü"
         Case ChrW$(7863): c = "aë"
         Case ChrW$(226): c = "aâ"
         Case ChrW$(7845): c = "aá"
         Case ChrW$(7847): c = "aà"
         Case ChrW$(7849): c = "aå"
         Case ChrW$(7851): c = "aã"
         Case ChrW$(7853): c = "aä"
         Case ChrW$(101): c = "e"
         Case ChrW$(233): c = "eù"
         Case ChrW$(232): c = "eø"
         Case ChrW$(7867): c = "eû"
         Case ChrW$(7869): c = "eõ"
         Case ChrW$(7865): c = "eï"
         Case ChrW$(234): c = "eâ"
         Case ChrW$(7871): c = "eá"
         Case ChrW$(7873): c = "eà"
         Case ChrW$(7875): c = "eå"
         Case ChrW$(7877): c = "eã"
         Case ChrW$(7879): c = "eä"
         Case ChrW$(111): c = "o"
         Case ChrW$(243): c = "où"
         Case ChrW$(242): c = "oø"
         Case ChrW$(7887): c = "oû"
         Case ChrW$(245): c = "oõ"
         Case ChrW$(7885): c = "oï"
         Case ChrW$(244): c = "oâ"
         Case ChrW$(7889): c = "oá"
         Case ChrW$(7891): c = "oà"
         Case ChrW$(7893): c = "oå"
         Case ChrW$(7895): c = "oã"
         Case ChrW$(7897): c = "oä"
         Case ChrW$(417): c = "ô"
         Case ChrW$(7899): c = "ôù"
         Case ChrW$(7901): c = "ôø"
         Case ChrW$(7903): c = "ôû"
         Case ChrW$(7905): c = "ôõ"
         Case ChrW$(7907): c = "ôï"
         Case ChrW$(105): c = "i"
         Case ChrW$(237): c = "í"
         Case ChrW$(236): c = "ì"
         Case ChrW$(7881): c = "æ"
         Case ChrW$(297): c = "ó"
         Case ChrW$(7883): c = "ò"
         Case ChrW$(117): c = "u"
         Case ChrW$(250): c = "uù"
         Case ChrW$(249): c = "uø"
         Case ChrW$(7911): c = "uû"
         Case ChrW$(361): c = "uõ"
         Case ChrW$(7909): c = "uï"
         Case ChrW$(432): c = "ö"
         Case ChrW$(7913): c = "öù"
         Case ChrW$(7915): c = "uø"
         Case ChrW$(7917): c = "öû"
         Case ChrW$(7919): c = "öõ"
         Case ChrW$(7921): c = "öï"
         Case ChrW$(121): c = "y"
         Case ChrW$(253): c = "yù"
         Case ChrW$(7923): c = "yø"
         Case ChrW$(7927): c = "yû"
         Case ChrW$(7929): c = "yõ"
         Case ChrW$(7925): c = "î"
         Case ChrW$(273): c = "ñ"
         Case ChrW$(65): c = "A"
         Case ChrW$(193): c = "AÙ"
         Case ChrW$(192): c = "AØ"
         Case ChrW$(7842): c = "AÛ"
         Case ChrW$(195): c = "AÕ"
         Case ChrW$(7840): c = "AÏ"
         Case ChrW$(258): c = "AÊ"
         Case ChrW$(7854): c = "AÉ"
         Case ChrW$(7856): c = "AÈ"
         Case ChrW$(7858): c = "AÚ"
         Case ChrW$(7860): c = "AÜ"
         Case ChrW$(7862): c = "AË"
         Case ChrW$(194): c = "AÂ"
         Case ChrW$(7844): c = "AÁ"
         Case ChrW$(7846): c = "AÀ"
         Case ChrW$(7848): c = "AÅ"
         Case ChrW$(7850): c = "AÃ"
         Case ChrW$(7852): c = "AÄ"
         Case ChrW$(69): c = "E"
         Case ChrW$(201): c = "EÙ"
         Case ChrW$(200): c = "EØ"
         Case ChrW$(7866): c = "EÛ"
         Case ChrW$(7868): c = "EÕ"
         Case ChrW$(7864): c = "EÏ"
         Case ChrW$(202): c = "EÂ"
         Case ChrW$(7870): c = "EÁ"
         Case ChrW$(7872): c = "EÀ"
         Case ChrW$(7874): c = "EÅ"
         Case ChrW$(7876): c = "EÃ"
         Case ChrW$(7878): c = "EÄ"
         Case ChrW$(79): c = "O"
         Case ChrW$(211): c = "OÙ"
         Case ChrW$(210): c = "OØ"
         Case ChrW$(7886): c = "OÛ"
         Case ChrW$(213): c = "OÕ"
         Case ChrW$(7884): c = "OÏ"
         Case ChrW$(212): c = "OÂ"
         Case ChrW$(7888): c = "OÁ"
         Case ChrW$(7890): c = "OÀ"
         Case ChrW$(7892): c = "OÅ"
         Case ChrW$(7894): c = "OÃ"
         Case ChrW$(7896): c = "OÄ"
         Case ChrW$(416): c = "Ô"
         Case ChrW$(7898): c = "ÔÙ"
         Case ChrW$(7900): c = "ÔØ"
         Case ChrW$(7902): c = "ÔÛ"
         Case ChrW$(7904): c = "ÔÕ"
         Case ChrW$(7906): c = "ÔÏ"
         Case ChrW$(73): c = "I"
         Case ChrW$(205): c = "Í"
         Case ChrW$(204): c = "Ì"
         Case ChrW$(7880): c = "Æ"
         Case ChrW$(296): c = "Ó"
         Case ChrW$(7882): c = "Ò"
         Case ChrW$(85): c = "U"
         Case ChrW$(218): c = "UÙ"
         Case ChrW$(217): c = "UØ"
         Case ChrW$(7910): c = "UÛ"
         Case ChrW$(360): c = "UÕ"
         Case ChrW$(7908): c = "UÏ"
         Case ChrW$(431): c = "Ö"
         Case ChrW$(7912): c = "ÖÙ"
         Case ChrW$(7914): c = "ÖØ"
         Case ChrW$(7916): c = "ÖÛ"
         Case ChrW$(7918): c = "ÖÕ"
         Case ChrW$(7920): c = "ÖÏ"
         Case ChrW$(89): c = "Y"
         Case ChrW$(221): c = "YÙ"
         Case ChrW$(7922): c = "YØ"
         Case ChrW$(7926): c = "YÛ"
         Case ChrW$(7928): c = "YÕ"
         Case ChrW$(7924): c = "Î"
         Case ChrW$(272): c = "Ñ"
      End Select
      UNICODEtoVNI = UNICODEtoVNI + c
   Next i
End Function

Cuối cùng, quay sang Form FRM_DANHMUCHANG, bạn sửa đoạn code sẳn có thành code như sau:

PHP:
Private Sub UserForm_Activate()
  For i = 1 To Sheet2.[A65536].End(xlUp).Row
    Set mDetail = Me.LVDMH.ListItems.Add(, , Sheet2.Cells(i + 1, 1))
    For j = 1 To 5
      mDetail.SubItems(j) = UNICODEtoVNI(Sheet2.Cells(i + 1, j + 1))
    Next j
  Next i
End Sub

Chỉ sửa tại dòng này: mDetail.SubItems(j) = UNICODEtoVNI(Sheet2.Cells(i + 1, j + 1))

Quá đơn giản phải không bạn? Thật ra ListView rất đơn giản!
 
Upvote 0
Ha ha, cuối cùng cũng được rồi, mừng quá.
- Có một vấn đề nữa nhờ bạn giúp dùm mình: Khi view lên thì mình muốn tất cả các tiêu đề đều được canh giữa nhưng nội dung từng dòng thì nếu là số thì canh phải và có phân cách hàng nghìn. Nếu là chữ thì canh trái.

Cụ thể như sau:
- Cột STT: định dạng 000, canh giữa
- Cột Mã hàng: luôn luôn 10 số, canh giữa.
- Cột tên hàng: canh trái.
- ĐVT: canh trái.
- 02 cột còn lại, canh phải, có dấu phân cách hàng nghàn.

Nhờ bạn giúp mình, chân thành cảm ơn bạn.
 

File đính kèm

Upvote 0
Ha ha, cuối cùng cũng được rồi, mừng quá.
- Có một vấn đề nữa nhờ bạn giúp dùm mình: Khi view lên thì mình muốn tất cả các tiêu đề đều được canh giữa nhưng nội dung từng dòng thì nếu là số thì canh phải và có phân cách hàng nghìn. Nếu là chữ thì canh trái.

Cụ thể như sau:
- Cột STT: định dạng 000, canh giữa
- Cột Mã hàng: luôn luôn 10 số, canh giữa.
- Cột tên hàng: canh trái.
- ĐVT: canh trái.
- 02 cột còn lại, canh phải, có dấu phân cách hàng nghàn.

Nhờ bạn giúp mình, chân thành cảm ơn bạn.
Chán các bạn quá đi! Cứ tự mình làm khó mình
Xem tôi làm đây, chẳng tốn tí hơi sức nào... quan trọng là chọn control phù hợp

untitled.JPG

Code của tôi chỉ có vầy:
PHP:
Private Sub UserForm_Activate()
  Dim Tmp
  With Sheet2
    With .Range(.[A1], .[A65536].End(xlUp)).Resize(, 6)
      Tmp = .Value
      With Me.LVDMH.Range(.Address)
        .Range("A2:A6000").NumberFormat = "000"
        .Range("B2:B60000").HorizontalAlignment = xlCenter
        .Range("E2:F60000").NumberFormat = "#,##0"
        .Value = Tmp
        .Borders.LineStyle = 1
      End With
    End With
  End With
End Sub
--------------------------------
Chơi cái bảng tính loại này, bạn mặc sức mà tung hoành
 

File đính kèm

Upvote 0
Ái chà, cái loại này mình thấy hay ghê, tha hồ thêm bớt, xóa. Được đó, nhưng bạn có thể giới hạn vùng chọn được không? Vì mình muốn người dùng chỉ thấy được trong phạm vi cột đó thôi. Kéo quác ra bên phải thì xấu lắm. Mà mình thấy hình như nó chạy hơi chậm thì phải. Cụ thể là khi đang sữa ở 1 ô nào đó => nhấp sang ô khác, nó chậm liền. Với lại danh mục hàng của mình dự tính sẽ có trên 500 mặt hàng, liệu tốc độ có ổn định được không bạn?

Nhờ bạn xem giúp dùm. Mình cảm ơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Ái chà, cái loại này mình thấy hay ghê, tha hồ thêm bớt, xóa. Được đó, nhưng bạn có thể giới hạn vùng chọn được không? Vì mình muốn người dùng chỉ thấy được trong phạm vi cột đó thôi. Kéo quác ra bên phải thì xấu lắm. Mà mình thấy hình như nó chạy hơi chậm thì phải. Cụ thể là khi đang sữa ở 1 ô nào đó => nhấp sang ô khác, nó chậm liền. Với lại danh mục hàng của mình dự tính sẽ có trên 500 mặt hàng, liệu tốc độ có ổn định được không bạn?

Nhờ bạn xem giúp dùm. Mình cảm ơn.
Với dữ liệu cở 500 dòng, hãy sửa đoạn
Mã:
With Me.LVDMH.Range(.Address)
  .Range("[B][COLOR=red]A2:A60000[/COLOR][/B]").NumberFormat = "000"
  .Range("[COLOR=red][B]B2:B60000[/B][/COLOR]").HorizontalAlignment = xlCenter
  .Range("[COLOR=red][B]E2:F60000[/B][/COLOR]").NumberFormat = "#,##0"
  .Value = Tmp
  .Borders.LineStyle = 1
End With
Thành
Mã:
With Me.LVDMH.Range(.Address)
  .Range("[COLOR=red][B]A2:A600[/B][/COLOR]").NumberFormat = "000"
  .Range("[COLOR=red][B]B2:B600[/B][/COLOR]").HorizontalAlignment = xlCenter
  .Range("[COLOR=red][B]E2:F600[/B][/COLOR]").NumberFormat = "#,##0"
  .Value = Tmp
  .Borders.LineStyle = 1
End With
Là hết chậm ngay
-------------
Còn việc giới hạn vùng chọn, bạn tự nghiên cứu đi

untitled.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Vẫn chậm, bạn thử đang nhập dữ liệu tại 1 ô rồi nhấp sang ô khác xem. Nó sẽ mất khoản 01 giây mới nhảy qua được. Với lại đây chỉ là sườn chưa có dữ liệu chứ dữ liệu thực tế thì chắc lâu lắm.

Mình tính làm 1 sheet nhật ký phát sinh => cái này vài ngàn dòng (cập nhật hằng ngày mà)
sau đó dữ liệu tài cột tồn KT và tồn TT sẽ dựa vào đó mà tính ra cho từng mặt hàng. (gần 500 mặt hàng).

Với lại mình muốn list đó chỉ có 06 cột thôi, mình không muốn người dùng có thể chọn các ô bên phải cột thứ 06, bạn có thể giới hạn lại được không bạn?

Nhờ bạn giúp dùm mình.
 
Upvote 0
Vẫn chậm, bạn thử đang nhập dữ liệu tại 1 ô rồi nhấp sang ô khác xem. Nó sẽ mất khoản 01 giây mới nhảy qua được. Với lại đây chỉ là sườn chưa có dữ liệu chứ dữ liệu thực tế thì chắc lâu lắm.

Mình tính làm 1 sheet nhật ký phát sinh => cái này vài ngàn dòng (cập nhật hằng ngày mà)
sau đó dữ liệu tài cột tồn KT và tồn TT sẽ dựa vào đó mà tính ra cho từng mặt hàng. (gần 500 mặt hàng).

Với lại mình muốn list đó chỉ có 06 cột thôi, mình không muốn người dùng có thể chọn các ô bên phải cột thứ 06, bạn có thể giới hạn lại được không bạn?

Nhờ bạn giúp dùm mình.
Vầy được chưa

untitled.JPG


Giới hạn 6 cột và 1000 dòng rồi đấy
Không biết máy bạn thế nào chứ trên máy tôi nó chày vèo vèo, chẳng thấy chậm tí nào cả
Còn muốn chỉnh gì nữa, bạn cứ Alt + F11 vào đó mà chỉnh tùy thích
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hì, không biết cảm ơn bạn thế nào cho đủ. Thêm tí nữa nha bạn.

- Có cách nào giới hạn số dòng phụ thuộc vào số mặt hàng của mình không? Ví dụ 10 mặt hàng thì 10 dòng. 100 mặt hàng thì 100 dòng? Mình đã thử đặt name nhưng không được.
 
Upvote 0
Hì, không biết cảm ơn bạn thế nào cho đủ. Thêm tí nữa nha bạn.

- Có cách nào giới hạn số dòng phụ thuộc vào số mặt hàng của mình không? Ví dụ 10 mặt hàng thì 10 dòng. 100 mặt hàng thì 100 dòng? Mình đã thử đặt name nhưng không được.
Code của tôi có đoạn:
PHP:
With Me.LVDMH.Range(.Address)
  .....
  ....
End With
Bạn thêm vào 1 dòng thế này:
PHP:
With Me.LVDMH.Range(.Address)
  .Parent.Parent.Windows(1).ViewableRange = .Address
  ....
End With
Nó sẽ giới hạn "động" luôn
 
Upvote 0
Hic, chuẩn không cần chỉnh luôn. Đúng ý mình luôn. Rất chân thành cảm ơn bạn. Bạn có thể giúp mình hoàn thiện các nút lệnh được không? Tới, lui, đầu, cuối. Thoát, thêm ...

Nhờ bạn.
 
Upvote 0
Hic, chuẩn không cần chỉnh luôn. Đúng ý mình luôn. Rất chân thành cảm ơn bạn. Bạn có thể giúp mình hoàn thiện các nút lệnh được không? Tới, lui, đầu, cuối. Thoát, thêm ...

Nhờ bạn.
Hic... Nghiên cứu tiếp đi ---> Nói thật là mình.. lười quá
Chỉ cần lưu ý rằng: SpreadSheet này nó hoạt động y chang 1 sheet thật, tức:
- Bạn cũng có thể dùng Find để tìm kiếm
- Có thể dùng thuộc tính Range
- Có thể Format cell
- Có thể Protect sheet
vân vân và vân vân
Dù sao thì dùng cái này vẫn khỏe hơn rất nhiều so với ListView (tất nhiên là tùy việc mà dùng)
 
Upvote 0
Thôi thì hỏi thêm cái nữa vậy. Khi mình mở file lên luôn hiện thông báo sau:
---------------------------
Microsoft Forms
---------------------------
This application is about to initialize ActiveX controls that might be unsafe. If you trust the source of this file, select OK and the controls will be initialized using your current workspace settings.

---------------------------
OK Cancel
---------------------------

Có cách nào bỏ nó không bạn?

Với lại thêm cái nữa. Mình thấy cái tool bar của nó cũng khá hay, mình muốn giữ một số cái và bỏ một số cái thì làm cách nào vậy bạn?
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi thì hỏi thêm cái nữa vậy. Khi mình mở file lên luôn hiện thông báo sau:
---------------------------
Microsoft Forms
---------------------------
This application is about to initialize ActiveX controls that might be unsafe. If you trust the source of this file, select OK and the controls will be initialized using your current workspace settings.

---------------------------
OK Cancel
---------------------------
Có cách nào bỏ nó không bạn?
Đương nhiên được, chỉnh trong Registry bạn à!
Để thuận tiên cho bạn, tôi làm sẳn file này! Việc của bạn chỉ là:
- Tải file đính kèm dưới đây về
- Giải nén, được file LoadCtlForm.reg
- Click phải vào file LoadCtlForm.reg chọn Merge
- Thông báo xuất hiện, bấm Yes rồi OK
Xong, thử lại file Excel của bạn
--------------------------------

Với lại thêm cái nữa. Mình thấy cái tool bar của nó cũng khá hay, mình muốn giữ một số cái và bỏ một số cái thì làm cách nào vậy bạn?
Trong cửa sổ VBA, đặt con trỏ chuột vào 1 cell bất kỳ của Speadsheet rồi click phải chuột, chọn "Commands and Options" rồi tùy ý mà chỉnh
Ví dụ: Muốn giữ lại Toolbar, ta chuyển sang tab Workbook, check vào "Toolbar"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hic, rồi lỡ máy khác mở lên thì sao bạn?

Với lại mình muốn là: hiện 1 số nút của thanh toolbar đó và bỏ một số nút chứ không phải bỏ hết bạn à.
 
Upvote 0
Hic, rồi lỡ máy khác mở lên thì sao bạn?
.
Thì chuyển đoạn code trong file .REG ấy thành VBA code luôn ---> Cho vào sub Auto_Open, khi mở file thì code sẽ tự động cho mọi thứ vào Registry ----> Còn chi tiết sẽ viết code thế nào thì... bạn tự nghiên cứu đi
(làm 1 hồi chắc phải giúp tất tần tật luôn quá, lấy gì để bạn suy nghĩ?)
Với lại mình muốn là: hiện 1 số nút của thanh toolbar đó và bỏ một số nút chứ không phải bỏ hết bạn à.
Việc chỉnh để ẩn hiện cái gì đó là do Control này quy định, đã nói tại bài #18 rồi ---> Nếu nó không đáp ứng như bạn mong đợi thì cũng đành chịu thôi bạn à!
(Được "con voi" có khi cũng chưa chắc rinh được HBT đâu nha)
 
Upvote 0
Web KT

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

Back
Top Bottom