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ờ
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 ?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
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!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 ?
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é.
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)
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]
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.
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.
Vậy mình hiểu code của sealand như vầy có đúng không:
sub nap() ' khai báo lệnh 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 chạy từ 1 đến n ( n là tổng số dòng của "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à ô ở cột 1, dòng 1 của miền "mammam" - tại i chạy 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 của combo đi, add lại một cái rowsource giống y chang như vậy.
thế là mình xóa luôn cái rowsource của combo này đi ( t ức là không khai báo rowsource của combo trong properties nữa, rồi là xóa luôn cái If đầu ti ên, chạy 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 với!
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!
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.
[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
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.