Hỏi về hidecolumnheads trong listview

Liên hệ QC

thuyyeu99

Trùm Nhiều Chuyện
Tham gia
6/6/08
Bài viết
1,729
Được thích
875
các anh chị cho em hỏi có cách nào gõ tiếng việt trong mục hidecolumnheads trong listview không.

cám ơn các anh chị quan tâm
 
Bạn chép thêm hàm chuyển từ TCVN3 thành Unicode vào dưới hàm dổi đẫ có

Mã:
Function doi_font(text As String) As String
Dim i, kytu, vitri, newtext
For i = 1 To Len(text)
  kytu = Mid(text, i, 1)
  vitri = InStr(1, StrVn3, kytu, 0)
  If vitri > 0 Then
    newtext = newtext & ChrW(Mid(CodUni, vitri * 5 - 4, 5))
  Else
    newtext = newtext & kytu
  End If
Next
doi_font = newtext
End Function
 
Upvote 0
Chào anh SEALAND
Sẵn anh đang online, em hỏi anh luôn File bữa trước em gửi Bằng EX07.
- Muốn ListWiew lọc từ cột thứ 2, 3 thì làm thế nào. Em dung finditem không được.
- Dùng ListView để hiện dữ liệu đã nhập vào sheets (VD: theo số 005, 006, 007..) giờ em dùng SPinBotton quay lại số 005 chỉnh sửa rồi gán lại vào sheets đúng vị trí số đó Có chèn thêm dữ liệu. Thì dùng Mảng hay dùng cách thủ công nhanh hơn. Cách thủ công em làm gần được thấy thủ công quá (lặp liên tục) nên dừng lại tìm cách tối ưu. File em gửi mail qua ĐC cũ của anh rồi, E không up được lên diễn đàn.
- Anh xem dùm em mấy sự kiện đã hợp lý chưa mà sao thấy code dài quá
Cám ơn anh
Mình đã coi lại bài của bạn nhưng chưa được kỹ nên chưa có ý kiến cụ thể được. nhưng để hiển thị dữ liệu lọc thì ta phải thay đổi biện pháp nạp dữ liệu.Mình sẽ gửi đường dẫn tham khảo cách lọc và nạp ở đây
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi thêm 1 vấn đề này nữa làm cách nào mình xác định được ô trên LV ứng với ô trong mảng của mình (dùng để sửa dữ liệu từ LV)
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi thêm 1 vấn đề này nữa làm cách nào mình xác định được ô trên LV ứng với ô trong mảng của mình (dùng để sửa dữ liệu từ LV)

Thông thường, một cơ sở dữ liệu chuẩn sẽ có các Primery key, index, v.v... Nếu Bảng dữ liệu (trong excel là sheet) của bạn quy định cột nào là key field thì ta có thể căn cứ vào giá trị tại cột đó để tìm kiếm (Có thể dùng phương thức Find hoặc For...Next để tìm) và xác định địa chỉ (dòng) của dữ liệu đó.
 
Upvote 0
Bài của anh Kiệt là bài lý thuyết chuẩn trong việc tìm kiếm này, bạn đọc và hiểu kỹ thì rất thuận lợi cho việc giao tiếp, liên kết dữ liệu giữa Form, Code và sheet và tư duy tổ chức dữ liệu. Mình thêm 1 cách thực hành ngoài cách anh Kiệt đã giới thiệu là dùng hàm Match() cũng rất nhanh.Trên Form mình đã ví dụ dòng thứ mấy trong ds và địa chỉ là ô nào trên sheet1 liên quan đến dòng hiện hành trên form.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thông thường, một cơ sở dữ liệu chuẩn sẽ có các Primery key, index, v.v... Nếu Bảng dữ liệu (trong excel là sheet) của bạn quy định cột nào là key field thì ta có thể căn cứ vào giá trị tại cột đó để tìm kiếm (Có thể dùng phương thức Find hoặc For...Next để tìm) và xác định địa chỉ (dòng) của dữ liệu đó.
Chào anh
Anh có thể đưa VD về tìm kiếm trong LISTVIEW dùng phương thức find hay for....next được không. Em nhớ là hình như chỉ tìm được ở cột đầu tiên thì phải. Muốn tìm ở cột khác thì phải dùng LISTVIEW tạm. KHông biết đã là tối ưu nhất chưa.
 
Upvote 0
To kieuvietphuong:
Bạn hiểu sai rồi, Ca_dafi nói là lấy giá trị của List làm tiêu chuẩn tìm kiếm và sẽ tìm trên sheet. Còn tìm bằng phương pháp nào hay tìm ở cột nào là do người viết code quyết định chứ.
Còn tìm trên list hoàn toàn có thể ở bất kỳ cột nào, không cần list tạm.
Nếu không nhầm thì bạn liên tưởng tới bài của anh Duyệt về vấn đề lọc. Nhưng mình cho rằng dùng list tạm trong lọc là không hợp lý vì nó liên quan tới các đối tương khác. Mình nghĩ nên sử dụng 1 trong 3 cách sau là hợp lý hơn:
-Thượng sách: Thay đổi cách nạp rồi nạp theo ĐKlọc. Mỗi khi thay đổi xoá đi và nạp lại.
-Trung sách: Khai báo 1 biến mảng Public rồi lưu giá trị List ra mảng khi cần nạp từ mảng vào LIST
-Hạ sách:Chép dữ liệu trên List ra 1 sheet tạm rồi lọc
 
Upvote 0
Chào anh
Anh có thể đưa VD về tìm kiếm trong LISTVIEW dùng phương thức find hay for....next được không. Em nhớ là hình như chỉ tìm được ở cột đầu tiên thì phải. Muốn tìm ở cột khác thì phải dùng LISTVIEW tạm. KHông biết đã là tối ưu nhất chưa.

Bạn có thể tham khảo hai link sau để áp dụng cho vấn đề của bạn! Chúc bạn thành công!
http://www.giaiphapexcel.com/forum/showpost.php?p=67185&postcount=2
http://www.giaiphapexcel.com/forum/showthread.php?p=114512
 
Upvote 0
*******************************
Sub napdl()
'Tam khai bien tra phuc vu loc sau nay
Dim ktra As Boolean
Dim muc As ListItem
ktra = True
If Me.ListView1.ListItems.Count > 0 Then Me.ListView1.ListItems.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sheet1.[a2:a2000]) + 1
If ktra Then
Set muc = Me.ListView1.ListItems.Add(, , Sheet1.Cells(i, 1))
With muc
.SubItems(1) = Sheet1.Cells(i, 2)
.SubItems(2) = Sheet1.Cells(i, 3)
.SubItems(3) = Sheet1.Cells(i, 4)
.SubItems(4) = Sheet1.Cells(i, 5)
End With
End If
Next
End Sub
***********************************
các anh cho em hỏi cái này mình áp dụng để gáng cho mãng được không (Em muốn mở form "tênform.show" lên là LV tự chạy)
 
Upvote 0
*******************************
[highlight=vb]Sub napdl()
'Tam khai bien tra phuc vu loc sau nay
Dim ktra As Boolean
Dim muc As ListItem
ktra = True
If Me.ListView1.ListItems.Count > 0 Then Me.ListView1.ListItems.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sheet1.[a2:a2000]) + 1
If ktra Then
Set muc = Me.ListView1.ListItems.Add(, , Sheet1.Cells(i, 1))
With muc
.SubItems(1) = Sheet1.Cells(i, 2)
.SubItems(2) = Sheet1.Cells(i, 3)
.SubItems(3) = Sheet1.Cells(i, 4)
.SubItems(4) = Sheet1.Cells(i, 5)
End With
End If
Next
End Sub
[/highlight]
***********************************
các anh cho em hỏi cái này mình áp dụng để gáng cho mãng được không (Em muốn mở form "tênform.show" lên là LV tự chạy)
Code trên của bạn có thể rút gọn lại rất nhiều và chạy nhanh hơn nếu dùng mảng (bằng cách đặt Name). Bạn gửi file lên để mọi người hỗ trợ cụ thể nhé!
 
Upvote 0
ĐÂY là file của anh sealand em tìm được trong GPE. em muốn thêm mãng A "đoạn tô màu vàng"(khi mở form lên nó sẽ cập nhật cả hai LV) trong file vao LV2 thi làm cách nào ?


sẵn tiện các anh cho em hỏi đoạn code này sửa làm sao

**********************
Private Sub LVDataSelector_ItemClick(ByVal Item As MSComctlLib.ListItem)
Call tim
End Sub
****************************************
Sub tim()
Dim ma, dong
ma = LVDataSelector.SelectedItem.text
dong = Application.WorksheetFunction.Match(ma, S01.[a2:a10000], 0) ' nó báo lỗi
Me.TextBox6 = dong
Me.TextBox7 = S01.Cells(dong + 1, 1).Address

End Sub
*****************************************
Khi em chọn vào LV trúng o rỗng thì nó báo lỗi em không biết cách sửa (em muốn khi chọn trúng o rỗng trong LV thì nó sẽ hiện thông báo "đây là o rong" và nó vẫn cho chọn trong LV)


Cám ơn các anh
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
1/Tạo mảng nạp DL nhanh, gọn nhưng không thay đổi được, bạn không thêm bớt xóa sửa, lọc được mà phải gắn với nó. Tùy thực tế mà áp dụng. (Mình không thấy mảng màu vàng đâu cả)
2/Thực ra mình chỉ nêu ví dụ về cách tìm. Thực tế phải chặn lỗi chứ:
VD: Đếm số dòng dữ liệu để khai S01.[a1:annn] cho phù hợp
VD:Khi nạp mã =empty thì bỏ qua
VD: Sửa câu lệnh lỗi

Mã:
**********************
Private Sub LVDataSelector_ItemClick(ByVal Item As MSComctlLib.ListItem)
Call tim
End Sub
****************************************
Sub tim()
Dim ma, dong
ma = LVDataSelector.SelectedItem.text
if trim(ma)<>"" then
[COLOR=Red]dong = Application.WorksheetFunction.Match(ma, S01.[a2:a10000], 0)[/COLOR]
Me.TextBox6 = dong
Me.TextBox7 = S01.Cells(dong + 1, 1).Address
else
Me.TextBox6 = ""
 Me.TextBox7 =""
end if
End Sub
*****************************************
 
Lần chỉnh sửa cuối:
Upvote 0
Sub napdl()
'Tam khai bien tra phuc vu loc sau nay
Dim ktra As Boolean
Dim muc As ListItem
ktra = True
If Me.ListView1.ListItems.Count > 0 Then Me.ListView1.ListItems.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sheet1.[a2:a2000]) + 1
If ktra Then
Set muc = Me.ListView1.ListItems.Add(, , Sheet1.Cells(i, 1))
With muc
.SubItems(1) = Sheet1.Cells(i, 2)
.SubItems(2) = Sheet1.Cells(i, 3)
.SubItems(3) = Sheet1.Cells(i, 4)
.SubItems(4) = Sheet1.Cells(i, 5)
End With
End If
Next
End Sub

đây là đoạn code anh dùng để tạo LV anh có thể chỉ em cách nạp vô LV bàng Mãng được không đây là Ví dụ



 
Upvote 0
Nạp bằng mảng cũng vậy thôi, thay thay sheet1.cells bằng tên mảng là được. Mục đích dùng mảng chỉ để thay đổi nguồn còn nó rắc rối thêm mà thôi.
 
Upvote 0
Em dùng DataSelector để mở form có 2 LV nhưng nó mở tới 2 form ( là LVDataSelector xong rồi nhấn nút thoát nó mới hiện LVDataSelector1 ). em tính gán bằng mãng để nó tự nạp mỗi khi load form vì file em làm sai mang nhieu lắm.

Private Sub xoa_Click()

Dim ma, dong, ma1, dong1
ma = LVDataSelector.SelectedItem.text
ma1 = doi_font(LVDataSelector.SelectedItem.SubItems(1)) ' doi thanh font unicode
If Trim(ma) <> "" Then
dong = Application.WorksheetFunction.Match(ma, S01.[a2:a6536], 0)
dong1 = Application.WorksheetFunction.Match(ma1, S01.[b2:b6536], 0)
'Me.TextBox6 = dong
'Me.TextBox7 = S01.Cells(dong + 1, 1).Address
'Me.LVDataSelector.ListItems.Item(bindex).Selected = True
'Me.LVDataSelector.ListItems.Item(bindex).EnsureVisible
'Set RRng = Range("La1")
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
If dong = dong1 Then
S01.Cells(dong + 1, 1).Value = TextBox1.Value
S01.Cells(dong + 1, 2).Value = TextBox2.Value
S01.Cells(dong + 1, 3).Value = TextBox3.Value
S01.Cells(dong + 1, 4).Value = TextBox4.Value
S01.Cells(dong + 1, 5).Value = TextBox5.Value
Else
If dong > dong1 Then
'r1 = LVDataSelector.SelectedItem.Item(bindex).Selected + 1
S01.Cells(dong + 1, 1).Value = TextBox1.Value
S01.Cells(dong + 1, 2).Value = TextBox2.Value
S01.Cells(dong + 1, 3).Value = TextBox3.Value
S01.Cells(dong + 1, 4).Value = TextBox4.Value
S01.Cells(dong + 1, 5).Value = TextBox5.Value
Else
If dong1 > dong Then
'r1 = LVDataSelector.SelectedItem.Item(bindex).Selected + 1
S01.Cells(dong1 + 1, 1).Value = TextBox1.Value
S01.Cells(dong1 + 1, 2).Value = TextBox2.Value
S01.Cells(dong1 + 1, 3).Value = TextBox3.Value
S01.Cells(dong1 + 1, 4).Value = TextBox4.Value
S01.Cells(dong1 + 1, 5).Value = TextBox5.Value
End If
End If
End If
Else
MsgBox ("dddddddd")
End If
Me.LVDataSelector.ListItems.Clear
Call NhapDuLieu
End Sub

cái này anh có thể rut gon được không (em tìm theo 2 điều kiện ở hai ô ) tự em chẳng biết tí gì về VB toàn là mò và hỏi không
 
Lần chỉnh sửa cuối:
Upvote 0
Lỗi load LVDatầSelector1 là do chép sửa sót Bạn tìm bằng lệnh Find LVDataSelector1sửa lại là xong. Mình bận chút hẹn sau nhé
 
Upvote 0
Cái sub xoa của bạn không được rồi:
-Trước hết phải rõ ý đồ xóa dòng nào, dòng hiện thời hay dòng đánh dấu.
-Xóa như thế nào: Xóa trên list hay cả trên sheet.
Sau đó mới viết lệnh xóa tương ứng.
 
Upvote 0
Cái sub xoa của bạn không được rồi:
-Trước hết phải rõ ý đồ xóa dòng nào, dòng hiện thời hay dòng đánh dấu.
-Xóa như thế nào: Xóa trên list hay cả trên sheet.
Sau đó mới viết lệnh xóa tương ứng.

Nhờ anh hướng dẫn em xóa dòng được đánh dấu (dòng chọn trên LV và xóa dòng có dữ liệu tương ứng trên sheet ) "chỉ xóa dữ liệu thôi"

cám ơn anh
 
Upvote 0
Xóa dữ liệu trên sheet tại dòng có mã =maxoa như thế nào chắc bạn làm được:
-Tìm dòng có mã=maxoa
-Xóa dòng đó đi.
Mình chỉ ví dụ xóa 1 dòng trên Listview thôi (Bạn có thể thêm checkbox vào List để có thể chọn và xóa nhiều dòng)

P/s: Không đủ thấy áy náy, xóa trên sheet1 bạn thêm vào lệnh xóa trên:

dong = Application.WorksheetFunction.Match(maxoa, Sheet1.[a1:a5000], 0)
Sheet1.Cells(dong, 1).EntireRow.Delete
(Dòng 5000 là mình tạm vậy cho nhanh còn trong chương trình nên tìm dòng cuối cùng có dữ liệu)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xóa dữ liệu trên sheet tại dòng có mã =maxoa như thế nào chắc bạn làm được:

Cám ơn anh cái này em sẽ có gắng chư chưa chằc lảm được+-+-+-+. anh cho em hỏi thêm vấn đề nữa là em muốn những dòng nào mà xóa rồi tức là trên LV không có dữ liệu, em muốn những dòng đó sẽ ẩn đi hoặc nó sẽ mờ đi không cho chọn được không.

có cách nào làm ẩn list bos trên form không (tức là không cho hiện lên form nhưng mình vẫn lấy được dữ liệu trong đó)

file của em chỉ xóa được dữ liệu thôi không được xóa hàng vì nếu mà xóa hàng thì dữ liệu của em nó chạy lung tung hết
 
Upvote 0
Web KT

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

Back
Top Bottom