Update dữ liệu bằng Form

Liên hệ QC

HoangHacVT

Thành viên chính thức
Tham gia
3/6/09
Bài viết
82
Được thích
41
Nghề nghiệp
Marketing và bất cứ thứ gì người đẹp nhờ
Các bạn xem ví dụ trong file đính kèm: Mình đã có một vùng dữ liệu nhưng chưa hoàn chỉnh. Mình tạo 1 form để lấy dữ liệu từ sheet excel vào form và sau đó nhấp thêm dữ liệu vào nhưng nó không hoạt động. Nhờ các ACE giúp dùm nhé,
Cảm ơn
Hạc
 

File đính kèm

Các bạn xem ví dụ trong file đính kèm: Mình đã có một vùng dữ liệu nhưng chưa hoàn chỉnh. Mình tạo 1 form để lấy dữ liệu từ sheet excel vào form và sau đó nhấp thêm dữ liệu vào nhưng nó không hoạt động. Nhờ các ACE giúp dùm nhé,
Cảm ơn
Hạc
Bạn muốn nhập liệu như thế nào vậy bạn, nhập vào dòng dưới cùng của bảng ?
 
Upvote 0
Mình thấy cách nạp Combo kiểu này khó cho việc Update, bạn đổi sang tự đông nạp đi (Mình cũng chưa tìm lý do của bạn, mà hiệu chỉnh theo cách của mình thôi)
 

File đính kèm

Upvote 0
Bạn muốn nhập liệu như thế nào vậy bạn, nhập vào dòng dưới cùng của bảng ?
Không phải nhập thêm dữ liệu vào bảng, mà là tìm dữ liệu rồi sửa bằng form dom ơi!

Wow, hết xẩy. Cám ơn nhiều nhe sealand!

Duy có điều mình không hiểu về cái combo.listIndex và Listcount. Giải thích thêm cho mình 2 cái này nhé.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Wow, hết xẩy. Cám ơn nhiều nhe sealand!

Duy có điều mình không hiểu về cái combo.listIndex và Listcount. Giải thích thêm cho mình 2 cái này nhé.

ListIndex và ListCount là thuộc tính của Combobox

- ListCount là tổng số mục (hàng) trong danh sách của Combobox

- ListIndex là giá trị xác định vị trí của mục (hàng) được tính từ ListCount(n-1), ví dụ như List có 8 mục, ListCount = 8, mục đầu tiên của List gọi là ListIndex(0), mục cuối cùng là ListIndex(7).
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thấy cách nạp Combo kiểu này khó cho việc Update, bạn đổi sang tự đông nạp đi (Mình cũng chưa tìm lý do của bạn, mà hiệu chỉnh theo cách của mình thôi)

Sealand ơi, giúp với. Chạy được có mỗi 1 lần, lần sau nó báo “Run-time error’-2147467259(80004005)’: Unspecified error” là sao? (con trỏ nháy vào dòng này:
For i = 1 To Sheet1.Range("mammam").Rows.Count
Có khi nó lại nháy vào dòng này:
If Me.ComboUdate.ListCount > 0 Then Me.ComboUdate.Clear

Đ oạn code này:
Mã:
 Private Sub UserForm_Initialize()[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]nap[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]End Sub[code][/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]Nghĩa là sao? Có phải nó gây ra cái lỗi đó không?[/FONT][/COLOR]
 
Upvote 0
Sealand ơi, giúp với. Chạy được có mỗi 1 lần, lần sau nó báo “Run-time error’-2147467259(80004005)’: Unspecified error” là sao? (con trỏ nháy vào dòng này:
For i = 1 To Sheet1.Range("mammam").Rows.Count
Có khi nó lại nháy vào dòng này:
If Me.ComboUdate.ListCount > 0 Then Me.ComboUdate.Clear

Đ oạn code này:
Mã:
 Private Sub UserForm_Initialize()[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]nap[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]End Sub[code][/FONT][/COLOR]
[COLOR=#0000bb][FONT=Times New Roman]Nghĩa là sao? Có phải nó gây ra cái lỗi đó không?[/FONT][/COLOR][/QUOTE]
 
Tôi chạy thử chục lần mà chẳng thấy lỗi gì cả?!
 
Đoạn code đó ([COLOR=#0000bb]Private Sub UserForm_Initialize()[/COLOR][COLOR=black])[/COLOR] trước khi Form Active, nó sẽ làm một việc gì đó, trong trường hợp này nó chạy lệnh "nap", lệnh này tạo nguồn (RowSource) cho Combobox. Chỉ vậy thôi.
 
Upvote 0
Bạn kiểm tra cái Name mammam còn dúng vị trí không, nếu không thì lỗi ở cái khác phải tìm chứ không kết luận được.
Nói thực mình không thích sử dụng Name lắm mà tự mình xác định vùng dữ liệu nó quy về một mối VBA vì Name rất dễ bị sửa hay xoá.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi chạy thử chục lần mà chẳng thấy lỗi gì cả?!

Đoạn code đó (Private Sub UserForm_Initialize()) trước khi Form Active, nó sẽ làm một việc gì đó, trong trường hợp này nó chạy lệnh "nap", lệnh này tạo nguồn (RowSource) cho Combobox. Chỉ vậy thôi.

Vy mình hiu code ca sealand như vy có đúng không:
sub nap() ' khai báo lnh nap
dim i ' khai báo biến i
If Me.ComboBox1.ListCount > 0 Then Me.ComboBox1.Clear ' nếu combobox1 có nhiu dòng hơn 0 thì xóa rowsource ca nó đi
For i = 1 To Sheet3.Range("mammam").Rows.Count ' i chy t 1 đến n ( n là tng s dòng ca "mammam")
Me.ComboBox1.AddItem Sheet3.Range("mammam").Cells(i, 1) ' add thêm 1 dòng vô (rowsource) combobox1 , dòng này có ô đu tiên có giá tr là ô ct 1, dòng 1 ca min "mammam" - ti i chy t 1
Me.ComboBox1.List(i - 1, 1) = Sheet3.Range("mammam").Cells(i, 2) ' ti đây là hết hiu, dòng vi ct nó chy lung tung
Me.ComboBox1.List(i - 1, 2) = Sheet3.Range("mammam").Cells(i, 3)
Me.ComboBox1.ListIndex = 0
Next
End Sub
nói chung là xóa cái rowsource ca combo đi, add li mt cái rowsource ging y chang như vy.
thế là mình xóa luôn cái rowsource ca combo này đi ( t ức l à kh ông khai b áo rowsource c ủa combo trong properties n ữa, ri là xóa luôn cái If đu ti ên, chy form - l úc n ày m ình đ ã x óa h ết m ấy c ái code kh ác, ch ỉ đ ể l ại 1 c ái sub nap n ày th ôi.
kết qu: "permission denied" - hehehe, giúp mình vi!
 
Upvote 0
Vy mình hiu code ca sealand như vy có đúng không:
sub nap() ' khai báo lnh nap
dim i ' khai báo biến i
If Me.ComboBox1.ListCount > 0 Then Me.ComboBox1.Clear ' Nếu đã dòng nào thì có thì xoá trắng để nạp từ đầu
For i = 1 To Sheet3.Range("mammam").Rows.Count ' i chy t 1 đến n ( n là tng s dòng ca "mammam")
Me.ComboBox1.AddItem Sheet3.Range("mammam").Cells(i, 1) ' add thêm 1 dòng vô (rowsource) combobox1 , dòng này có ô đu tiên có giá tr là ô ct 1, dòng 1 ca min "mammam" - ti i chy t 1
Me.ComboBox1.List(i - 1, 1) = Sheet3.Range("mammam").Cells(i, 2) 'Thêm cột 2 ( code=1 vì tính từ 0) của dòng i giá trị ô bên cạnh
Me.ComboBox1.List(i - 1, 2) = Sheet3.Range("mammam").Cells(i, 3)' Tương tự cho cột 3
Me.ComboBox1.ListIndex = 0' Đưa con trỏ về dòng đầu tiên
Next
End Sub
nói chung là xóa cái rowsource ca combo đi, add li mt cái rowsource ging y chang như vy.
thế là mình xóa luôn cái rowsource ca combo này đi ( t ức là không khai báo rowsource của combo trong properties nữa, ri là xóa luôn cái If đu ti ên, chy form - l úc n ày m ình đ ã x óa h ết mấy cái code khác, chỉ để lại 1 cái sub nap này thôi.
kết qu: "permission denied" - hehehe, giúp mình vi!


Rieeng dòng
Me.ComboBox1.ListIndex = 0
Chuyển xuống dưới Next (Để vậy vẫn được nhưng không hợp lý vì nạp xong 1 dòng lại đưa con trỏ về dòng đầu. Đưa sau Next thì nạp hoàn tất mới đưa về. Như vậy sẽ tăng tốc độ nạp và tránh động tác thừa. Có lẽ mình soat không hết nên sót lỗi)
Muốn an toàn hơn khi mammam không có dòng nào (Combobox rỗng) thì dòng lệnh này nên viết de tranh loi dung chuong trinh
If Me.ComboBox1.ListCount>0 then Me.ComboBox1.ListIndex = 0

Tự nạp như thế này ta chủ động trong việp cập nhật lại dữ liệu cho Combo khi nguồn có thay đổi (Như ta sửa từ Form chẳng hạn tachir gọi nap là có dữ liệu mới nhất.
 
Lần chỉnh sửa cuối:
Upvote 0
Rieeng dòng Me.ComboBox1.ListIndex = 0
Chuyển xuống dưới Next (Để vậy vẫn được nhưng không hợp lý vì nạp xong 1 dòng lại đưa con trỏ về dòng đầu. Đưa sau Next thì nạp hoàn tất mới đưa về. Như vậy sẽ tăng tốc độ nạp và tránh động tác thừa. Có lẽ mình soat không hết nên sót lỗi)
Muốn an toàn hơn khi mammam không có dòng nào (Combobox rỗng) thì dòng lệnh này nên viết de tranh loi dung chuong trinh
If Me.ComboBox1.ListCount>0 then Me.ComboBox1.ListIndex = 0

Tự nạp như thế này ta chủ động trong việp cập nhật lại dữ liệu cho Combo khi nguồn có thay đổi (Như ta sửa từ Form chẳng hạn tachir gọi nap là có dữ liệu mới nhất.

Kakaka, được rồi. Tớ xóa hết đi làm lại từng cái một, nó chạy ngon lành, duy có điều tớ quên cái Me.ComboBox1.ListIndex = 0 nhưng nó vẫn chạy rất OK.
Hehehe, cám ơn rất nhiều nhe!
 
Upvote 0
Kakaka, được rồi. Tớ xóa hết đi làm lại từng cái một, nó chạy ngon lành, duy có điều tớ quên cái Me.ComboBox1.ListIndex = 0 nhưng nó vẫn chạy rất OK.
Hehehe, cám ơn rất nhiều nhe!

Tôi làm gọn code lại một chút cho bạn đây:
PHP:
Dim Rng As Range, i As Long
 
Private Sub UserForm_Initialize()
  nap 'hanh dong truoc khi mo form
End Sub
 
 
'Click vao Combobox1, cac gia tri tung cot trong list se duoc add vao tung textbox
Private Sub ComboBox1_Click()
  With ComboBox1
    TextBox1.Value = .Column(0)
    TextBox2.Value = .Column(1)
    TextBox3.Value = .Column(2)
  End With
End Sub
 
 
'Nhap nhung thay doi
Private Sub CommandButton1_Click()
  Set Rng = Range("mammam")
  i = ComboBox1.ListIndex + 1
  Rng.Cells(i, 1) = TextBox1.Text
  Rng.Cells(i, 2) = TextBox2.Text
  Rng.Cells(i, 3) = TextBox3.Text
  nap
End Sub
 
 
'Tao RowSource cho Combobox1
Sub nap()
  Set Rng = Range("mammam")
  With ComboBox1
    If .ListCount > 0 Then .Clear 'bo list cu, cap nhat list moi
    For i = 1 To Rng.Rows.Count
      .AddItem Rng.Cells(i, 1)
      .List(i - 1, 1) = Rng.Cells(i, 2)
      .List(i - 1, 2) = Rng.Cells(i, 3)
      .ListIndex = 0
    Next
  End With
End Sub

-------------------------------------------------
Không biết bạn bao nhiêu tuổi, chứ anh Sealand đã rất lớn tuổi rồi đấy (18-08-1959)! Bạn xưng hô cho đúng phép với người lớn nhé!
Thân ái.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Không biết bạn bao nhiêu tuổi, chứ anh Sealand đã rất lớn tuổi rồi đấy (18-08-1959)! Bạn xưng hô cho đúng phép với người lớn nhé!
Thân ái.

Chết toi chưa, tớ xin lỗi nhé. Năm nay tớ gần được 50, tại tính tình vẫn xuê xoa quen thói. Đã nhắn tin riêng xin lỗi anh sealand rồi.
Thế còn learning_excel năm nay bao nhiêu để tớ biết mà xứng cho phải?
Chậc, xem hồ sơ cũng có biết là ai bao nhiêu đâu, quý vị lượng thứ cho vậy!
Hạc
 
Upvote 0
Bạn lưu ý dòng lệnh:

If Me.ComboBox1.Listcount>0 then Me.ComboBox1.ListIndex=0

Dòng lệnh này nó có tác dụng cho vấn đề sau:

-Khi mở Form nó sẽ load dữ liệu dòng đầu vào các ô tương ứng cho bạn, tránh bỏ trống trơn trông không thiện cảm.
-Nó xoá dữ liệu cũ và nạp lại cho các Textbox, do vậy có thể bỏ việc xoá dữ liệu trên Code. Cập nhật dữ liệu Live tránh trường hợp Trông vậy mà không phải vậy.
 
Upvote 0
Mình xin lưu ý là nạp dùng Add nhằm phát triển về sau cho lọc, tìm v.v...Còn nếu chỉ chọn sửa như ở đây thì dùng RowSource là gọn nhất (Dùng bằng lệnh VBA để thay đổi). Nhân đây, mình tìm ra lý do Code ban đầu của HoangHacVT không Update đuợc vì lý do như sau:

Range("mammam") là RowSource của Combobox1. Khi Form load thì range này bị khoá. Muốn cập nhật thì phải giải phóng RowSource. Sau khi cập nhật ta khai báo lại.
Đây là Code của Form. Các bạn tham khảo nha:
Mã:
[COLOR=SeaGreen]''''Nap cac TextBox khi List di chuyển[/COLOR]
Private Sub ComboBox1_Click()
Me.TextBox1.Value = Me.ComboBox1.Column(0)
Me.TextBox2.Value = Me.ComboBox1.Column(1)
Me.TextBox3.Value = Me.ComboBox1.Column(2)
End Sub
[COLOR=SeaGreen]'''Cập nhật cho vùng mammam[/COLOR]
Private Sub CommandButton1_Click()
Dim dg
dg = Me.ComboBox1.ListIndex + 1
Me.ComboBox1.RowSource = "" [COLOR=SeaGreen] 'Giải phóng RowSource[/COLOR]
With Sheet3.Range("mammam")
.Cells(dg, 1) = Me.TextBox1.Text
.Cells(dg, 2) = Me.TextBox2.Text
.Cells(dg, 3) = Me.TextBox3.Text
End With
nap [COLOR=SeaGreen]'Nạp lại RowSource[/COLOR]
End Sub
[COLOR=SeaGreen]'''Code nap RowSource dùng chung[/COLOR]
Sub nap()
Me.ComboBox1.RowSource = "mammam"
Me.ComboBox1.ListIndex = 0
End Sub
[COLOR=SeaGreen]'Nạp Khi mở Form[/COLOR]
Private Sub UserForm_Initialize()
nap
End Sub
 

File đính kèm

Upvote 0
Anh Seland ơi, có cái này em thắc mắc là nếu vô tình sửa trên combobox thì sau khi bấm vào ghi, nó sẽ nhập vào hàng 1 ngay lập tức. Có nên bẫy lỗi này không anh? Hay chỉ cần ý thức của người nhập?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chỉ cần đổi Properties của ComboBox1 phần MatchRequired=True thì sao sửa được mà nhập
 
Upvote 0
Nhân đây, mình tìm ra lý do Code ban đầu của HoangHacVT không Update đuợc vì lý do như sau:

Range("mammam") là RowSource của Combobox1. Khi Form load thì range này bị khoá. Muốn cập nhật thì phải giải phóng RowSource. Sau khi cập nhật ta khai báo lại.

Đúng vậy bác sealand. Sau khi learning-excel chỉ ra sub(nap) là để tạo rowsource cho combo thì mình không set cái rowsource cho combo nữa (vì đằng nào cũng nạp lại nên set làm chi) nên code ấy nó chạy ngon lành.
 
Upvote 0
Các bác ơi, nếu vẫn như cách update du lieu trên, nếu em đưa thêm filter (trường hợp dữ liệu dài), thì khi filter, dữ liệu không cập nhật được bác ah. em gửi file các bác tham khảo và hướng dẫn hộ em nhé. cám ơn các bác.


Solved!! cam on cac bac quan tam
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nào có sách hướng dẫn lậptrình Excel bằng tiếng việt dễ hiểu cho mình xin, Cám ơn nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom