chemgio123
Thành viên mới
- Tham gia
- 21/5/12
- Bài viết
- 28
- Được thích
- 0
Mọi sự nằm ở code này: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á
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
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ệuMọi sự nằm ở code này:
Code này là thuộc ComboBox CBvidu, nó nằm ở sheet CTPSPHP: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
Tùy bạn quyết định xử lý vậy
Mọi sự nằm ở code này:
Code này là thuộc ComboBox CBvidu, nó nằm ở sheet CTPSPHP: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
Tùy bạn quyết định xử lý vậy
Đó là vì các bạn chỉ biết xài mà không biết cách "làm chủ" nó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
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ênthầy cho e 1 hướng xử lý được ko ạ, chả có nhẽ bỏ cả đoạn code này
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
Không phải vậy!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
Tại bạn không chịu đọc kỹ những gì tôi ghi ở bài 5: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ức là phải nạp list cho ComboBox bằng code chứ không nên đặt thuộc tính RowsourceThô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
Private Sub Worksheet_Activate()
Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub
Sub Auto_Open()
Sheets("CTPS").Combobox1.List() = Sheets("MAHH").Range("MAHH").Value
End Sub
Cám ơn thầy tuyệt quá, bug đã được xử lý.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:
vàPHP:Private Sub Worksheet_Activate() Combobox1.List() = Sheets("MAHH").Range("MAHH").Value End Sub
Code trên nằm ở sheet CTPS và code dưới nằm trong 1 ModulePHP:Sub Auto_Open() Sheets("CTPS").Combobox1.List() = Sheets("MAHH").Range("MAHH").Value End Sub
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
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)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 Autpen 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 Autpen để 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
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2