Trần Huy Du
Trần Huy Du
Thảo luận 9 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 205 lượt xem

Private Sub Sua_du_lieu_Click()Dim a As LongSheets(1)Range("B1") = TextBox1TextWith Sheets1a

Private Sub Sua_du_lieu_Click()
Dim a As Long
Sheets(1).Range("B1") = TextBox1.Text
With Sheets1
a = Range("B10:B1000").Find(Cells(1, "B").Value).Row
Cells(a, "D").Select
Selection = TextBox3.Text
Cells(a, "E").Select
Selection = TextBox4.Text
Cells(a, "F").Select
Selection = TextBox5.Text
Cells(a, "G").Select
Selection = TextBox6.Text
Cells(a, "H").Select
Selection = TextBox7.Text
End With
End Sub
mình có code này nhập để sửa dữ liệu tìm theo cột B nhưng khi thay đổi giá trị thì chỉ có cột D là thay đổi còn các cột khác không nhập được. giúp mình với.
Thảo luận 9 câu trả lời
Lượt xem 205 lượt xem
Vỗ tay vỗ tay
Trần Huy Du 02:04 - Apr 23, 2020
Chào bạn bạn vui lòng đẩy file lê cho dễ hình dung nhé
Vỗ tay vỗ tay
Trần Huy Du 02:04 - Apr 23, 2020
https://drive.google.com/file/d/12e5y... bạn xem giúp mình với
Vỗ tay vỗ tay
Trần Huy Du 02:04 - Apr 23, 2020
Vỗ tay vỗ tay
Trần Huy Du 03:04 - Apr 23, 2020
Mình trả lời các nội dung nhé:
Thứ 1: câu lệnh
Sheets(1).Range("B1") = TextBox1.Text
bạn dùng Sheets(1) là Sheet thứ nhất của Workbook
còn bên dưới lại dùng
With Sheet1
như thế Sheet1 không phải lúc nào cũng giống với Sheets(1). Bạn chú ý vấn đề này để tránh nhầm lẫn về sau.
---
Thứ 2: bạn viết sai chữ Sheet1 rồi (Bạn viết là Sheets1 thừa chữ s)
Chú ý viết đúng chính tả không là code sai. Ở đây code chạy không được do sai chỗ này.
---
Thứ 3: Chúng ta không dùng Select với Selection, mà dùng trực tiếp luôn:
.Cells(a, "D").Value = TextBox3.Text
.Cells(a, "E").Value = TextBox4.Text
.Cells(a, "F").Value = TextBox5.Text
.Cells(a, "G").Value = TextBox6.Text
.Cells(a, "H").Value = TextBox7.Text
Select với Selection hạn chế sử dụng vì nó là thao thác thừa. Chỉ khi nào thực sự cần tới Select thì mới dùng tới nó thôi.
Select với Selection hay xuất hiện khi dùng VBA thông qua record macro. Nhưng qua bài 6 chương 6 mình có giải thích vấn đề này, nó không cần thiết khi viết code trực tiếp như thế này.
---
Thứ 4: phương pháp tìm dòng cần sửa của bạn cũng được, nhưng có thể nâng cao hơn 1 chút là tìm theo từ Dòng đầu tới dòng cuối trong cột B, thay vì xác định rõ dòng 10 tới dòng 1000. Như thế về sau phát sinh hơn 1000 dòng sẽ không hoạt động đúng. Các giới hạn vùng nên giới hạn bằng biến không cố định giá trị.
Vỗ tay vỗ tay
Trần Huy Du 04:04 - Apr 23, 2020
Mình cảm ơn nhiều,mình đã sửa code nhưng khi ấn Button SuaDuLieu thì chỉ có giá trị cột D là thay đổi còn các cột E,F,G,H mặc dù có nhập lại dữ liệu nhưng lại không không thay đổi giá trị mới đó.giải thích giúp mình đoạn đó với.
Vỗ tay vỗ tay
Trần Huy Du 04:04 - Apr 23, 2020
Nguyên nhân của việc này là:
Bạn load dữ liệu vào Listbox trong userForm theo vùng DanhSach.
Vùng này sẽ luôn cập nhật khi bạn để chế độ tính toán tự động. Do đó mỗi khi bạn sửa dữ liệu, thì chỉ cần sửa giá trị đầu tiên (cột D) là ngay lập tức DanhSach đã nạp mới luôn, khiến các giá trị khác chưa được nạp vào.
Bạn sẽ cần thêm lệnh
Application.Calculation = xlCalculationManual
trước khi đưa dữ liệu vào
sau khi lưu nội dung sửa rồi, bạn lại đưa về chế độ tính toán tự động
Application.Calculation = xlCalculationAutomatic
---
Câu lệnh chuẩn là:
Private Sub Sua_du_lieu_Click()
Dim a As Long
a = Application.WorksheetFunction.Match(CStr(TextBox1), Sheet1.Range("B10:B1000"), 0) + 9
Application.Calculation = xlCalculationManual
With Sheet1
'.Range("B" & a).Value = Me.TextBox1.Value
.Range("D" & a).Value = Me.TextBox3.Value
.Range("E" & a).Value = Me.TextBox4.Value
.Range("F" & a).Value = Me.TextBox5.Value
.Range("G" & a).Value = Me.TextBox6.Value
.Range("H" & a).Value = Me.TextBox7.Value
End With
Application.Calculation = xlCalculationAutomatic
... 'Cac cau lenh khac sau khi luu noi dung sua
End Sub
---
ở đây mình có thay đổi 1 chút trong cách tìm dòng theo hàm match, bạn có thể tham khảo thêm.
Vỗ tay vỗ tay
Trần Huy Du 18:04 - Apr 23, 2020
Mình cảm ơn nhiều nhé!
Vỗ tay vỗ tay
Trần Huy Du 20:04 - Apr 23, 2020
Bạn sửa lại các code khác mà có sử dụng 1 dòng .select, dòng tiếp theo dùng selection nhé
Vì cách viết như thế vừa dài, vừa khó đọc code, code chạy chậm. Lúc mới học thì hay mắc lỗi này, nhưng nên sửa càng sớm càng tốt.
Vỗ tay vỗ tay
Trần Huy Du 20:04 - Apr 23, 2020
Mình hiểu rồi. Chắc chắn mình sẽ cần bạn hỗ trợ nhiều.cảm ơn bạn đã hỗ trợ.
Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông