Xem lỗi VBA

Liên hệ QC

duyangels

Thành viên mới
Tham gia
7/2/10
Bài viết
49
Được thích
9
Nhờ các bác xem giúp lỗi chi cập nhật dữ liệu lần thứ 2.
Khi mở form danh sách khách hàng, chọn xem tất cả khách hàng, sau đó chọn 1 khách hàng xem thử, rồi muốn thay đổi thông tin khách hàng đó và bấm cập nhật, bấm 1 lần thì được nhưng cập nhật lần thứ 2 là bị lỗi chỗ chữ màu đỏ. Nhờ các bác xem giúp. file đính kèm
Private Sub cmdSuaDuLieu_Click()Dim j As Integer, Cont
With UserForm1
If .txtHovaten = "" Or .txtTencongty = "" Then Exit Sub
For j = 1 To 12
Cont = Choose(j, .txtSoTT.Text, .txtMaSo.Text, .txtHovaten.Text, .txtTencongty.Text, .txtNhucau.Text, .txtTennguoinhan.Text, .txtDiaChiXH.Text, .txtDienThoai.Text, .txtEmail.Text, .txtSkype.Text, .txtFacebook.Text, .txtGHICHU.Text)
Worksheets("nguonttkh").Cells(sRow, j) = Cont
Next j
End With
sRow = 0
MsgBox "CAP NHAT XONG"
End Sub
 
Nhờ các bác xem giúp lỗi chi cập nhật dữ liệu lần thứ 2.
Khi mở form danh sách khách hàng, chọn xem tất cả khách hàng, sau đó chọn 1 khách hàng xem thử, rồi muốn thay đổi thông tin khách hàng đó và bấm cập nhật, bấm 1 lần thì được nhưng cập nhật lần thứ 2 là bị lỗi chỗ chữ màu đỏ. Nhờ các bác xem giúp. file đính kèm
sai chỗ này nè bạn
sRow = 0
 
Upvote 0
Vậy phải sữa như thế nào vậy bạn mình có đổi thử sang 1 hay các số khác thì cập nhật lần 2 được nhưng các lần tiếp theo nó lại ghi thẳng lên sheet với dòng tương ứng đã sữa. Bạn xem giúp với.
 
Upvote 0
Vậy phải sữa như thế nào vậy bạn mình có đổi thử sang 1 hay các số khác thì cập nhật lần 2 được nhưng các lần tiếp theo nó lại ghi thẳng lên sheet với dòng tương ứng đã sữa. Bạn xem giúp với.

Bạn bỏ dòng sRow = 0 đó đi, rồi thử xem sao
 
Upvote 0
Hai bác cho e hỏi, tại sao form danh sách chỉ chạy được khi mình đang ở sheet nguonttkh click mở form thì được, nếu ở sheet khác mà open form lên khi chạy thì bị lỗi. Ví dụ mình đang ở sheet menu bấm quản lý thông tin khách hàng mình chay macro để show userform1 thì báo lỗi.
Private Sub txtMaSo_AfterUpdate()Dim Rng As Range, Cl As Range
Set Rng = Worksheets("nguonttkh").Range([B9], [B9].End(xlDown))
Set Cl = Rng.Find(UserForm1.txtMaSo, , xlValues, xlWhole)
If Not Cl Is Nothing Then
sRow = Cl.Row
With UserForm1
.txtSoTT = Cl.Offset(, -1)
.txtHovaten = Cl.Offset(, 1)
.txtTencongty = Cl.Offset(, 2)
.txtNhucau = Cl.Offset(, 3)
.txtTennguoinhan = Cl.Offset(, 4)
.txtDiaChiXH = Cl.Offset(, 5)
.txtDienThoai = Cl.Offset(, 6)
.txtEmail = Cl.Offset(, 7)
.txtSkype = Cl.Offset(, 8)
.txtFacebook = Cl.Offset(, 9)
.txtGHICHU = Cl.Offset(, 10)
End With
Else
MsgBox "KHONG CO MA KHACH HANG NAY"
End If
End Sub
 
Upvote 0
Hai bác cho e hỏi, tại sao form danh sách chỉ chạy được khi mình đang ở sheet nguonttkh click mở form thì được, nếu ở sheet khác mà open form lên khi chạy thì bị lỗi. Ví dụ mình đang ở sheet menu bấm quản lý thông tin khách hàng mình chay macro để show userform1 thì báo lỗi.

Trong đoạn code bạn tìm đến dòng

Set Rng = Worksheets("nguonttkh").Range([B9], [B9].End(xlDown))

Và sửa thành

Set Rng = Worksheets("nguonttkh").Range(Worksheets("nguonttkh").[B9], Worksheets("nguonttkh").[B9].End(xlDown))
 
Upvote 0
ok thank bác Vo tinh nhiều, bác cho mình hỏi thêm làm thế nào để cố định dòng đầu tiên trong listbox (mã KH, tên KH...) để mình không chọn dòng này được, chỉ chọn được các dòng có thông tin khách hàng thôi. cám ơn bác trước.
 
Upvote 0
ok thank bác Vo tinh nhiều, bác cho mình hỏi thêm làm thế nào để cố định dòng đầu tiên trong listbox (mã KH, tên KH...) để mình không chọn dòng này được, chỉ chọn được các dòng có thông tin khách hàng thôi. cám ơn bác trước.

Trong đoạn code của Sub txtMaSo_AfterUpdate() bạn tìm đến dòng

Set Cl = Rng.Find(UserForm1.txtMaSo, , xlValues, xlWhole)

Sửa lại thành

Set Cl = Rng.Offset(1).Find(UserForm1.txtMaSo, , xlValues, xlWhole)
 
Upvote 0
Cám ơn bác Vo Tinh nhiều, cho mình hỏi thêm làm thế nào để ẩn các dòng trống ở phía dưới của listbox maKH, để khi click chuột vào sẽ không nhấn phải các mục chưa có dữ liệu, chỉ hiện thị các mục có dữ liệu mà thôi. cám ơn bác.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bác Vo Tinh nhiều, cho mình hỏi thêm làm thế nào để ẩn các dòng trống ở phía dưới của listbox maKH, để khi click chuột vào sẽ không nhấn phải các mục chưa có dữ liệu, chỉ hiện thị các mục có dữ liệu mà thôi. cám ơn bác.

Trong đoạn code của Sub CmdAll_Click() bạn tìm đến dòng

LastRow = Worksheets("Datalist").Range("A65536").End(xlUp).Row

Sửa lại thành

LastRow = Worksheets("NguonTTKH").Range("A65536").End(xlUp).Row - 8

Bao giờ thì xong nhỉ -0-/.
 
Upvote 0
Trong đoạn code của Sub txtMaSo_AfterUpdate() bạn tìm đến dòng



Sửa lại thành
Tại sao phải có khoảng trắng giữa txtMaSo và xlValues vậy bạn?
Bạn có thể giải thích ý nghĩa câu lệnh này được ko? Cảm ơn bạn rất nhiều!
Set Cl = Rng.Offset(1).Find(UserForm1.txtMaSo, , xlValues, xlWhole)
 
Upvote 0
Mã:
Set Cl = Rng.Offset(1).Find(UserForm1.txtMaSo, , xlValues, xlWhole)

Tìm trong vùng Rng với trị cần tìm đang chứa trong txtMaSo với 2 tham số (tìm theo giá trị (Không là dạng công thức) & tìm theo nguyên thể (Không phải tìm chỉ 1 phần của chuỗi); Giá trị tìm thấy đem gán cho tham biến vùng Cl
 
Upvote 0
Tại sao phải có khoảng trắng giữa txtMaSo và xlValues vậy bạn?
Bạn có thể giải thích ý nghĩa câu lệnh này được ko? Cảm ơn bạn rất nhiều!
Set Cl = Rng.Offset(1).Find(UserForm1.txtMaSo, , xlValues, xlWhole)
Những người muốn học thì dù xin code của người khác họ cũng học được nhiều thứ.

Khi xem code của người khác mà gặp những cấu trúc, lệnh, hàm, phương thức nào chưa biết thì phải tìm đọc trong help. Nếu phương thức có nhiều parameter và mỗi parameter lại có thể nhận nhiều giá trị thì phải tự thay đổi các giá trị khác nhau -> chạy code -> xem có gì thay đổi. Cứ như thế phải đọc và "vọc" hàm mà người ta dùng, cho đến lúc có thể nói: Tôi đã biết hết về nó. Cứ như thế với từng mục mà mình chưa biết. Đọc 1 biết 10 là thế.

Người ta dùng phương thức Find của đối tượng Range. Biết tên đối tượng, phương thức rồi sao không tìm đọc trong help? Cái gì cũng hỏi?

Giữa txtMaSo và xlValues là parameter thứ 2 nhưng người ta để trống, không nhập giá trị gì cả. Khi đó parameter sẽ nhận giá trị mặc định.

Parameter thứ 2 là After. Trong help ghi rõ:

"Range.Find Method
Finds specific information in a range.
Syntax

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
...
After Optional Variant The cell after which you want the search to begin. This corresponds to the position of the active cell when a search is done from the user interface. Note that After must be a single cell in the range. Remember that the search begins after this cell; the specified cell isn’t searched until the method wraps back around to this cell. If you don’t specify this argument, the search starts after the cell in the upper-left corner of the range."
 
Upvote 0
Những người muốn học thì dù xin code của người khác họ cũng học được nhiều thứ.

Khi xem code của người khác mà gặp những cấu trúc, lệnh, hàm, phương thức nào chưa biết thì phải tìm đọc trong help. Nếu phương thức có nhiều parameter và mỗi parameter lại có thể nhận nhiều giá trị thì phải tự thay đổi các giá trị khác nhau -> chạy code -> xem có gì thay đổi. Cứ như thế phải đọc và "vọc" hàm mà người ta dùng, cho đến lúc có thể nói: Tôi đã biết hết về nó. Cứ như thế với từng mục mà mình chưa biết. Đọc 1 biết 10 là thế.

Người ta dùng phương thức Find của đối tượng Range. Biết tên đối tượng, phương thức rồi sao không tìm đọc trong help? Cái gì cũng hỏi?

Giữa txtMaSo và xlValues là parameter thứ 2 nhưng người ta để trống, không nhập giá trị gì cả. Khi đó parameter sẽ nhận giá trị mặc định.

Parameter thứ 2 là After. Trong help ghi rõ:

"Range.Find Method
Finds specific information in a range.
Syntax

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
...
After Optional Variant The cell after which you want the search to begin. This corresponds to the position of the active cell when a search is done from the user interface. Note that After must be a single cell in the range. Remember that the search begins after this cell; the specified cell isn’t searched until the method wraps back around to this cell. If you don’t specify this argument, the search starts after the cell in the upper-left corner of the range."
Cảm ơn bạn đã giải thích nhưng bạn có thể không cần làm thế vì mình ko có hỏi bạn để bạn fải gay gắc như vậy. Mình chưa có qua lớp VBA nào cả toàn là tự học thôi, cái gì không hiểu thì mình hỏi. Và đây là câu hỏi đầu tiên của mình trên forum này chứ mình ko có phải cái gì cũng hỏi bạn à!
Bài đã được tự động gộp:

Mã:
Set Cl = Rng.Offset(1).Find(UserForm1.txtMaSo, , xlValues, xlWhole)

Tìm trong vùng Rng với trị cần tìm đang chứa trong txtMaSo với 2 tham số (tìm theo giá trị (Không là dạng công thức) & tìm theo nguyên thể (Không phải tìm chỉ 1 phần của chuỗi); Giá trị tìm thấy đem gán cho tham biến vùng Cl
Cảm ơn bạn rất nhiều!
 
Upvote 0
Cảm ơn bạn đã giải thích nhưng bạn có thể không cần làm thế vì mình ko có hỏi bạn để bạn fải gay gắc như vậy. Mình chưa có qua lớp VBA nào cả toàn là tự học thôi, cái gì không hiểu thì mình hỏi. Và đây là câu hỏi đầu tiên của mình trên forum này chứ mình ko có phải cái gì cũng hỏi bạn à!
Tôi có trách bạn không biết về VBA đâu? Nếu cho là trách thì tôi trách bạn không chịu đọc tài liệu. Bất cứ ai lập trình thì đều phải đọc tài liệu. Cho dù VB, Delphi, VBA đều phải đọc tài liệu. Tôi muốn ý thức cho bạn là bạn có 1 kho kiến thức, mà ngay trong tầm tay, ngay trong Excel. Ý thức thế vì rất nhiều người không biết là mình có kho báu ngay "trong nhà". Tôi chỉ ra cách mà bạn đọc 1 code nhưng học được 10.
Nếu bạn cho là tôi gay gắt ... Thôi tôi dừng ở đây.
 
Upvote 0
... có 1 kho kiến thức, mà ngay trong tầm tay, ngay trong Excel. Ý thức thế vì rất nhiều người không biết là mình có kho báu ngay "trong nhà". ...
Trong tiếng Anh có câu "The grass is always greener on the other side of the fence", thảm cỏ luôn luôn nhìn thấy (xanh) mướt hơn bên kia hàng rào (tức là nhà hàng xóm). Tiếng Việt có câu "bụt nhà không thiêng".
Vả lại, GPE đối với nhiều người cũng là kho báu vậy. Thay vì ở nhà tự đào vàng lấy thì vào GPE nhờ đào giùm cũng là chính sách của những người này.
(theo tôi biết thì ở GPE này cũng không thiếu kẻ đang vác cuốc trên vai, chờ nghe một tiếng nhờ là nhào ra đào hì hục)
 
Upvote 0
theo tôi biết thì ở GPE này cũng không thiếu kẻ đang vác cuốc trên vai, chờ nghe một tiếng nhờ là nhào ra đào hì hục
Trong số này có mình & trong khả năng là 'đào' ngay để chứng minh với bản thân là mình còn tồn tại & đán được tồn tại!
 
Upvote 0
(theo tôi biết thì ở GPE này cũng không thiếu kẻ đang vác cuốc trên vai, chờ nghe một tiếng nhờ là nhào ra đào hì hục)
Vác cuốc nhưng cũng phải mắt tinh, chân nhanh, khuỷu tay phải mạnh (không bị bệnh khớp nhé). Miếng ngon thì ít mà người cầm đũa chờ thì lại hơi nhiều. Cạnh tranh khốc liệt đấy nhé.
 
Upvote 0
Vác cuốc nhưng cũng phải mắt tinh, chân nhanh, khuỷu tay phải mạnh (không bị bệnh khớp nhé). Miếng ngon thì ít mà người cầm đũa chờ thì lại hơi nhiều. Cạnh tranh khốc liệt đấy nhé.
"Miếng ngon thì ít", ở đây dúng là chân lý.
Miếng thì có thể nhiều. Nhưng toàn là dai như da trâu.
 
Upvote 0
Web KT
Back
Top Bottom