Thêm, Sửa, Xóa trên ListView

Liên hệ QC

msc0506

Thành viên chính thức
Tham gia
14/4/08
Bài viết
56
Được thích
12
Mình đang cần code thêm sửa xóa trực tiếp trên ListView . Cao thủ nào đã vọc rồi hoặc có ví dụ về vấn đề này giúp mình với nhé, Minh đang cần

Cảm ơn trước
 
Lạ nhỉ! Tôi mở file này trên WinXP + Office 2003, vẫn xem được thoải mái mà chẳng cần chỉnh bất cứ thứ gìNói thêm rằng máy tôi chẳng có font Lào gì đâu nha:
View attachment 71859Còn cái vụ chỉnh Desktop gì gì đó tốt nhất không nên làm nếu không muốn gặp rắc rối sau này

Chữ lào Chuẩn nó phải như thế này,bạn xem ảnh.
Loi.jpg
 
Upvote 0
Nhưng cuối cùng bạn có sửa lại như bài #79 chưa vậy? Kết quả như mong đợi chứ?
phải công nhận là kết quả trên cả mong muốn ,nhưng mà tại sao cái form đó nó lại không mở được khi ta ở sheet khác.ý mình muốn là:có thể gọi form và sừa dữ liệu được khi ta ở một sheet khác(vì sheet có dữ liệu sẽ bị ẩn).bạn giúp mình nhé,cảm ơn bạn.
 
Upvote 0
phải công nhận là kết quả trên cả mong muốn ,nhưng mà tại sao cái form đó nó lại không mở được khi ta ở sheet khác.ý mình muốn là:có thể gọi form và sừa dữ liệu được khi ta ở một sheet khác(vì sheet có dữ liệu sẽ bị ẩn).bạn giúp mình nhé,cảm ơn bạn.

Cái listbox nó lấy nguồn tại đâu thì chỉnh sửa tại đó chứ sao bạn! Còn muốn chỉnh sửa ở sheet khác thì listbox phải nạp nguồn ở sheet đó.

Cũng có thể sửa được trên sheet khác nếu cùng mã (ID) sau đó dò tìm và sửa tại sheet đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn đã giải đáp,vấn đề này chắc phải dùng theo cách không ẩn sheet có dữ liệu,thay vào đấy sẽ dùng cách là:khi ta mở form thì cũng tự động mở khóa,khi đóng form thì cũng tự động khóa sheet lại./.Còn một vấn đề nữa nhờ bạn giúp là cách tạo tiêu đề cho ListBox,mình làm bằng cách liên kết tiêu đề của ListBox với tiêu đề trong bảng chứa dữ liệu rồi,mà khi mở form thì bị báo lỗi.cảm ơn bạn.
 
Upvote 0
Để làm điều này chỉ có thể dùng phương thức gán rowsource. Mà cái phương thức này nó lòng vòng thêm. Vậy thì tốt nhất là thêm mấy cái Label là xong.
 
Upvote 0
Để làm điều này chỉ có thể dùng phương thức gán rowsource. Mà cái phương thức này nó lòng vòng thêm. Vậy thì tốt nhất là thêm mấy cái Label là xong.
Dữ liệu mình có nhiều cột,mà chiều dài của form thì có hạn,không biết bạn Sealand còn cách nào khà thi hơn không.
 
Upvote 0
Đã vậy, mình làm tổng hợp luôn. Muốn chọn đâu thì chọn (Mẹo chọn là chỉ chọn cột đầu rồi tự mở thành 5 cột)
Dòng đầu tiên bao giờ cũng là tiêu đề, muốn lấy tiêu đề cột chọn từ dòng 1

1/Code của Form (Gọn hơn là đằng khác):

Mã:
Option Explicit
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim cot, Vl1, Vl2
Dim i, j, Tm()
Tm = Rng
Cancel = True
cot = InputBox("Sua dong hien thoi cot may? (1-5)")
If InStr(1, "1;2;3;4;5", cot) = 0 Then
MsgBox "Sai cot"
Exit Sub
End If
Vl2 = InputBox("Nhap gia tri can thay doi", , Tm(ListBox1.ListIndex + 1, cot))
Tm(Me.ListBox1.ListIndex + 1, cot) = Vl2
Rng = Tm
Me.ListBox1.RowSource = ""
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
End Sub
'------------------------------------
Private Sub UserForm_Initialize()
Dim i, Tm
Me.ListBox1.ColumnHeads = True
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
For i = 1 To Me.ListBox1.ColumnCount
Me.ListBox1.ColumnWidths = "80;80;80;100;90"
Next
Me.ListBox1.ListIndex = 0
End Sub
'------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Rng = Nothing
End Sub

2/Code của Nút mở Form:

Mã:
Option Explicit
Public Rng As Range
Sub Mo()
Dim TB
Application.DisplayAlerts = False
TB = "Ban chon vung sua du lieu, neu chon duoi 5 cot Pro" & Chr(10)
TB = TB & "se tu dong mo rong them thanh 5 cot. Neu thua se cat"
On Error GoTo thoat:
Set Rng = Application.InputBox(TB, , , , , , , 8)
If Rng.Columns.Count <> 5 Then Set Rng = Rng.Columns(1).Resize(, 5)
MsgBox "Ban chon vung: " & Rng.Address & " tren sheet: " & Rng.Parent.Name
UserForm1.Show
Application.DisplayAlerts = True
Exit Sub
thoat:
Set Rng = Nothing
MsgBox "Ban khong chon hay chon loi vung sua"
Application.DisplayAlerts = True
End Sub
 

File đính kèm

  • KhamHa2.rar
    25.9 KB · Đọc: 94
Lần chỉnh sửa cuối:
Upvote 0
Đã vậy, mình làm tổng hợp luôn. Muốn chọn đâu thì chọn (Mẹo chọn là chỉ chọn cột đầu rồi tự mở thành 5 cột)
Dòng đầu tiên bao giờ cũng là tiêu đề, muốn lấy tiêu đề cột chọn từ dòng 1

1/Code của Form (Gọn hơn là đằng khác):

Mã:
Option Explicit
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim cot, Vl1, Vl2
Dim i, j, Tm()
Tm = Rng
Cancel = True
cot = InputBox("Sua dong hien thoi cot may? (1-5)")
If InStr(1, "1;2;3;4;5", cot) = 0 Then
MsgBox "Sai cot"
Exit Sub
End If
Vl2 = InputBox("Nhap gia tri can thay doi", , Tm(ListBox1.ListIndex + 1, cot))
Tm(Me.ListBox1.ListIndex + 1, cot) = Vl2
Rng = Tm
Me.ListBox1.RowSource = ""
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
End Sub
'------------------------------------
Private Sub UserForm_Initialize()
Dim i, Tm
Me.ListBox1.ColumnHeads = True
Me.ListBox1.RowSource = Rng.Parent.Name & "!" & Rng.Address
For i = 1 To Me.ListBox1.ColumnCount
Me.ListBox1.ColumnWidths = "80;80;80;100;90"
Next
Me.ListBox1.ListIndex = 0
End Sub
'------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Rng = Nothing
End Sub

2/Code của Nút mở Form:

Mã:
Option Explicit
Public Rng As Range
Sub Mo()
Dim TB
Application.DisplayAlerts = False
TB = "Ban chon vung sua du lieu, neu chon duoi 5 cot Pro" & Chr(10)
TB = TB & "se tu dong mo rong them thanh 5 cot. Neu thua se cat"
On Error GoTo thoat:
Set Rng = Application.InputBox(TB, , , , , , , 8)
If Rng.Columns.Count <> 5 Then Set Rng = Rng.Columns(1).Resize(, 5)
MsgBox "Ban chon vung: " & Rng.Address & " tren sheet: " & Rng.Parent.Name
UserForm1.Show
Application.DisplayAlerts = True
Exit Sub
thoat:
Set Rng = Nothing
MsgBox "Ban khong chon hay chon loi vung sua"
Application.DisplayAlerts = True
End Sub
Bạn Sealand xem lại giúp mình với,mình đánh số vào rồi mà nó không hoạt động gì cả.
 
Upvote 0
Bạn đánh số vào đâu? Khi hộp input đầu tiên hiện ra bạn dùng chuột để quét các cột chọn mà (Nếu gõ phải chính xác và có tên sheet. Sau đó mới trở lại bình thường mà.
 
Upvote 0
Chào bạn sealand,nhờ bạn giúp mình sửa lại cái form trên để cho nó chỉ hiện thị và sửa những cột mình cần,ví dụ:chi hiển và sửa cột 2,3,9,58 đến 68.tức là trong listbox có thể cho hiện đầy đủ các cột từ 1 đến 68 cũng được,còn các textbox thì chỉ hiện các cột cần sửa,cảm ơn bạn nhiều.
 
Upvote 0
Sửa trưc tiếp thì không được. Tốt nhất là ta liên kết ra textbox. KhanHa Tham khao nha
Bạn Sealand ơi,Trong bài #68 có thể tính toán trong TextBox được không,Ví dụ Cot4 bằng Cot3 + Cot2 .
Và Cot5 bằng Cot1 - Cot4 .Cảm ơn bạn.
 
Upvote 0
Hoàn toàn được, chả có gì khó khăn cả
 
Upvote 0
Mình đã làm theo cách của bạn,trong bài "Hỏi về Code trong UserForm" nhưng nó không hoạt động,Nhờ bạn làm giúp mình với.cảm ơn bạn.
 
Upvote 0
Mình đã làm theo cách của bạn,trong bài "Hỏi về Code trong UserForm" nhưng nó không hoạt động,Nhờ bạn làm giúp mình với.cảm ơn bạn.
Thì bạn cứ dùng vòng lập For... Next bình thường duyệt qua các dòng trong ListBox ---> Muốn cộng trừ gì mà chẳng được (y chang như làm trên bảng tính)
 
Upvote 0
Bạn ấy cần tính mấy cái textbox lại càng đơn giản nữa.
 
Upvote 0
Web KT
Back
Top Bottom