Giúp sửa lỗi delete nội dung 1 cell( VBA), rất khó chịu

Liên hệ QC

chemgio123

Thành viên mới
Tham gia
21/5/12
Bài viết
28
Được thích
0
:=\+:=\+ Mình không biết diễn tả nó như nào nữa.
Lỗi rất kỳ cục, xóa nội dung 1 cell trong sheet mã hàng hóa là chữ tự điền vào ô bên cạnh. Vô cùng ức chế. Ói máu mà chết quá:=\+:=\+:=\+
 

File đính kèm

  • loicode.rar
    77.8 KB · Đọc: 48
:=\+:=\+ Mình không biết diễn tả nó như nào nữa.
Lỗi rất kỳ cục, xóa nội dung 1 cell trong sheet mã hàng hóa là chữ tự điền vào ô bên cạnh. Vô cùng ức chế. Ói máu mà chết quá:=\+:=\+:=\+
Mọi sự nằm ở code này:
PHP:
Private Sub CBvidu_Change()
On Error GoTo bien
If Sheet2.CBvidu.ListFillRange = "MAHH" Then
    ActiveCell.Offset(0, 1).Value = Sheet2.CBvidu.Column(1)
    ActiveCell.Offset(0, 2).Value = Sheet2.CBvidu.Column(2)
End If
bien:  Exit Sub
End Sub
Code này là thuộc ComboBox CBvidu, nó nằm ở sheet CTPS
Tùy bạn quyết định xử lý vậy
 
Upvote 0
Mọi sự nằm ở code này:
PHP:
Private Sub CBvidu_Change()
On Error GoTo bien
If Sheet2.CBvidu.ListFillRange = "MAHH" Then
    ActiveCell.Offset(0, 1).Value = Sheet2.CBvidu.Column(1)
    ActiveCell.Offset(0, 2).Value = Sheet2.CBvidu.Column(2)
End If
bien:  Exit Sub
End Sub
Code này là thuộc ComboBox CBvidu, nó nằm ở sheet CTPS
Tùy bạn quyết định xử lý vậy
Tôi cũng đã từng bị ComboBox di động này phát sinh nhiều lỗi, như không copy & Paste hoặc chọn dòng để Insert thì cái CB chạy lung tung...Sau này tôi dùng Form để nhập liệu
 
Upvote 0
Mọi sự nằm ở code này:
PHP:
Private Sub CBvidu_Change()
On Error GoTo bien
If Sheet2.CBvidu.ListFillRange = "MAHH" Then
    ActiveCell.Offset(0, 1).Value = Sheet2.CBvidu.Column(1)
    ActiveCell.Offset(0, 2).Value = Sheet2.CBvidu.Column(2)
End If
bien:  Exit Sub
End Sub
Code này là thuộc ComboBox CBvidu, nó nằm ở sheet CTPS
Tùy bạn quyết định xử lý vậy

thầy cho e 1 hướng xử lý được ko ạ, chả có nhẽ bỏ cả đoạn code này &&&%$R
 
Upvote 0
Tôi cũng đã từng bị ComboBox di động này phát sinh nhiều lỗi, như không copy & Paste hoặc chọn dòng để Insert thì cái CB chạy lung tung...Sau này tôi dùng Form để nhập liệu
Đó là vì các bạn chỉ biết xài mà không biết cách "làm chủ" nó
thầy cho e 1 hướng xử lý được ko ạ, chả có nhẽ bỏ cả đoạn code này
a22.gif
Thông thường, nên nạp ComboBox bằng List properties thay vì dùng Rowsource + LinkedCell sẽ không bị tình trạng trên
 
Upvote 0
sửa bài, hiểu cách gõ tiếng việt rồi. Gà quá--=0
 
Lần chỉnh sửa cuối:
Upvote 0
Gõ tiếng việt được rồi, E ko hiểu ý của thầy NDU lắm . E tạo 1 combobox CB2 mới rồi chọn rowresource của nó mặc địch là MAHH luôn thì khắc phục được việc xóa cell ko bị tự nhập ô ở sheet MAHH nữa nhưng ở sheetctps thì khi link combobox nó hiển thị mỗi 1 cột mặc dù e đã để nó hiển thị 3 cột, cũng ko link sang 2 cột khác theo ý của e. !$@!! Thầy sửa luôn cho e được ko ạ , chứ e mới bắt đầu mà tự luận để "làm chủ" thì khó lắm, e cần 1 vài example để biết mình sai chỗ nào -\\/.
 

File đính kèm

  • loicode2.rar
    70.7 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
E đã tự tìm ví dụ cho mình và thấy file này của thầy

Nhưng đoạn code này của thầy khó hiểu quá.

Sub Worksheet_Change(ByVal Target As Range) Dim Clls As Range
'On Error Resume Next
If Target.Column = 1 And Target.Columns.Count = 1 Then
For Each Clls In Target
If Clls = "" Then
Clls.Resize(, 5).Value = ""
Else
Clls.Resize(, 3).Value = Sheet1.Range("DM").Resize(, 1).Find(Clls, LookAt:=xlWhole).Resize(, 3).Value
End If
If Clls.Offset(, 3) <> "" Then Clls.Offset(, 4) = Clls.Offset(, 3) * Clls.Offset(, 2)
Next
ElseIf Target.Column = 4 And Target.Columns.Count = 1 Then
For Each Clls In Target
Clls.Offset(, 1) = Clls * Clls.Offset(, -1)
Next
End If
End Sub

Thầy giải thích giùm e được không ạ ?
 

File đính kèm

  • ComboBox_Nhaplieu_1.xls
    32 KB · Đọc: 15
Upvote 0
Dường như hỏi cái gì hơi nhiều 1 tý ở GPE này sẽ ko đc trả lời. Xin lỗi đã làm phiền
 
Upvote 0
Dường như hỏi cái gì hơi nhiều 1 tý ở GPE này sẽ ko đc trả lời. Xin lỗi đã làm phiền
Không phải vậy!
Có những vấn đề mà mọi người nghĩ nếu bạn cố gắng 1 chút cũng sẽ hiểu mà không cần bất cứ ai trợ giúp...
Vậy nên bạn cứ chịu khó tìm hiểu, sẽ nhớ lâu hơn
 
Upvote 0
Không phải vậy!
Có những vấn đề mà mọi người nghĩ nếu bạn cố gắng 1 chút cũng sẽ hiểu mà không cần bất cứ ai trợ giúp...
Vậy nên bạn cứ chịu khó tìm hiểu, sẽ nhớ lâu hơn

E xin lỗi mọi người, hôm trước là e nóng quá vì e cũng chịu khó mày mò để tiến bộ cho chính e chứ chẳng cho ai cả. E mò mãi ko được e mới hỏi chứ ko phải bạ đâu hỏi đó linh tinh.

Quay trở lại cái lỗi trên của e. E đã bỏ toàn bộ code trước đó và áp dụng cái ví dụ của thầy mà e nói ở bài trên. Ở sheet CTPS thì đã đúng ý e rồi ,Tuy nhiên cái lỗi ở sheet MAHH vẫn còn đó .

Quá mệt mỏi với cái combobox di động này !$@!!!$@!!!$@!!!$@!!!$@!! Cái bực là ko biết lỗi từ đâu mà ra
 

File đính kèm

  • test.rar
    61.7 KB · Đọc: 21
Upvote 0
E xin lỗi mọi người, hôm trước là e nóng quá vì e cũng chịu khó mày mò để tiến bộ cho chính e chứ chẳng cho ai cả. E mò mãi ko được e mới hỏi chứ ko phải bạ đâu hỏi đó linh tinh.

Quay trở lại cái lỗi trên của e. E đã bỏ toàn bộ code trước đó và áp dụng cái ví dụ của thầy mà e nói ở bài trên. Ở sheet CTPS thì đã đúng ý e rồi ,Tuy nhiên cái lỗi ở sheet MAHH vẫn còn đó .

Quá mệt mỏi với cái combobox di động này !$@!!!$@!!!$@!!!$@!!!$@!! Cái bực là ko biết lỗi từ đâu mà ra
Tại bạn không chịu đọc kỹ những gì tôi ghi ở bài 5:
Thông thường, nên nạp ComboBox bằng List properties thay vì dùng Rowsource + LinkedCell sẽ không bị tình trạng trên
Tức là phải nạp list cho ComboBox bằng code chứ không nên đặt thuộc tính Rowsource
Sửa lại như sau:
1> Xoá thuộc tính Rowsource của ComboBox:

Capture.JPG

































2> Nạp list cho ComboBox bằng code:


PHP:
Private Sub Worksheet_Activate()
  Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub

PHP:
Sub Auto_Open()
  Sheets("CTPS").Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub
Code trên nằm ở sheet CTPS và code dưới nằm trong 1 Module
Code này có tác dụng:
- Khi vừa khởi động file, list sẽ được nạp vào ComboBox
- Khi có thay đổi gì ở vùng MAHH, lúc chuyển sang sheet CTPS thì list sẽ tự cập nhât vào ComboBox
Xem file
 

File đính kèm

  • test.rar
    48.8 KB · Đọc: 41
Upvote 0
Tại bạn không chịu đọc kỹ những gì tôi ghi ở bài 5:

Tức là phải nạp list cho ComboBox bằng code chứ không nên đặt thuộc tính Rowsource
Sửa lại như sau:
1> Xoá thuộc tính Rowsource của ComboBox:

View attachment 82839

































2> Nạp list cho ComboBox bằng code:


PHP:
Private Sub Worksheet_Activate()
  Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub

PHP:
Sub Auto_Open()
  Sheets("CTPS").Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub
Code trên nằm ở sheet CTPS và code dưới nằm trong 1 Module
Code này có tác dụng:
- Khi vừa khởi động file, list sẽ được nạp vào ComboBox
- Khi có thay đổi gì ở vùng MAHH, lúc chuyển sang sheet CTPS thì list sẽ tự cập nhât vào ComboBox
Xem file
Cám ơn thầy tuyệt quá, bug đã được xử lý./-*+/
Tiện đây e muốn hỏi sự khác nhau giữa hai sự kiện wooksheet active và selection change khác nhau như thế nào ?
Mục đích là mở rộng bài toán , cũng cái combobox ấy e áp dụng cho nhiều cột trong sheet CTPS với nhiều list khác nhau (ý e là nhúng đoạn Combobox1.List() = Sheets("MAHH").Range("MAHH").Value vào selection change) và bỏ hẳn đoạn module auto Open đi (E thấy xóa module đó đi thì combobox vẫn tự cập nhật mà)
 
Upvote 0
Cám ơn thầy tuyệt quá, bug đã được xử lý./-*+/
Tiện đây e muốn hỏi sự khác nhau giữa hai sự kiện wooksheet active và selection change khác nhau như thế nào ?
Mục đích là mở rộng bài toán , cũng cái combobox ấy e áp dụng cho nhiều cột trong sheet CTPS với nhiều list khác nhau (ý e là nhúng đoạn Combobox1.List() = Sheets("MAHH").Range("MAHH").Value vào selection change) và bỏ hẳn đoạn module auto Open đi (E thấy xóa module đó đi thì combobox vẫn tự cập nhật mà)
1> Sự kiện Worksheet_Active thì code sẽ hoạt động khi ta chọn sheet có code... còn sự kiện SelectionChange, code sẽ hoạt động khi ta click chuột chọn cell (tên của sự kiện đã nói lên ý nghĩa rồi)
2> Bỏ Sub Auto_Open cũng không sao, nhưng List của ComboBox sẽ không hoạt động nếu ngay từ đâu mở file đã vào ngay sheet CTPS... và List sẽ được nạp khi bạn chuyển qua sheet khác, xong lại quay về sheet CTPS ---> Thí nghiệm sẽ biết
Vậy nên để phòng cho chắc, ta có sub Auto_Open để khi mở file nó nạp list luôn
Còn nếu bạn muốn nạp list trong sự kiện SelectionChange thì phải cẩn thận đặt điều kiện Target cho hợp lý, nếu không mỗi khi click chuột chọn cell, code lại làm động tác nạp list sẽ khiến cho file chậm đi
 
Upvote 0
1> Sự kiện Worksheet_Active thì code sẽ hoạt động khi ta chọn sheet có code... còn sự kiện SelectionChange, code sẽ hoạt động khi ta click chuột chọn cell (tên của sự kiện đã nói lên ý nghĩa rồi)
2> Bỏ Sub Auto_Open cũng không sao, nhưng List của ComboBox sẽ không hoạt động nếu ngay từ đâu mở file đã vào ngay sheet CTPS... và List sẽ được nạp khi bạn chuyển qua sheet khác, xong lại quay về sheet CTPS ---> Thí nghiệm sẽ biết
Vậy nên để phòng cho chắc, ta có sub Auto_Open để khi mở file nó nạp list luôn
Còn nếu bạn muốn nạp list trong sự kiện SelectionChange thì phải cẩn thận đặt điều kiện Target cho hợp lý, nếu không mỗi khi click chuột chọn cell, code lại làm động tác nạp list sẽ khiến cho file chậm đi

Cảm ơn thầy e hiểu rồi, mỗi cột làm 1 combobox là hợp lý, tuy mất công tý nhưng file chạy nhẹ
 
Upvote 0
Web KT
Back
Top Bottom