Xin các anh chị em cho hỏi, trong VBA thì Target và ActiveCell khác nhau tính chất gì, như thế nào ?
Ý bạn đang nói đến cái Target nào đây? Là Target trong các sự kiện Change, SelectionChange chăng?
- Trong sự kiện Change, Target là tất cả những cell có thay đổi số liệu
- Trong sự kiện SelectionChange, Target là tất cả những cell mà bạn quét chọn
Vậy nên Target có thể là 1 cell những cũng có thể là nhiều cell
Còn ActiveCell, đương nhiên là cell đang được active và nó luôn là 1 cell (cho dù bạn có đang chọn bao nhiêu cell)
Ví dụ: Bạn dùng chuột quét chọn từ B3 đến D6 thì:
- Ở trong sự kiện Selection, Target = B36
- ActiveCell = B3
Lưu ý: Nếu bạn quét ngược lại từ D6 đến B3 thì ActiveCell = D6
Tóm lại: trong khu vực Selection, cell nào sáng màu thì cell ấy là ActiveCell
If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 Then[INDENT]If Target.Rows.Count = 1 Then[/INDENT]
[INDENT=2]If Target.Value <> "" Then[/INDENT]
[INDENT=3](Do something)[/INDENT]
[INDENT=2]End If[/INDENT]
[INDENT]End If[/INDENT]
End If
Chắc bạn nói đến trường hợp mà Target đang là MergeCell?Em đang tập tành VBA nên bỡ ngỡ nhiều vấn đề
Trên diễn đàn em thấy sử dụng nhiều Target trong sự kiện Worksheet_Change để phản ứng với sự thay đổi nội dung của cell (thường là các cell cùng cột hoặc cùng dòng). Và để bẫy lỗi người ta dùng mấy hàm if lồng nhau, ví dụ như
Mã:If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 Then[INDENT]If Target.Rows.Count = 1 Then[/INDENT] [INDENT=2]If Target.Value <> "" Then[/INDENT] [INDENT=3](Do something)[/INDENT] [INDENT=2]End If[/INDENT] [INDENT]End If[/INDENT] End If
Vậy trong trường hợp này nếu dùng ActiveCell có phải mình loại trừ được 1 bẫy lỗi If Target.Rows.Count = 1 không ??
Chắc bạn nói đến trường hợp mà Target đang là MergeCell?
Để chắc ăn Target luôn là 1 cell thì nên viết vầy: If Target(1,1).Value <> ""
If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 And Target(1,1).Value <> "" And Target.Value <> "" Then
(Do something)
End If
Nó báo lỗi vì chỗ này: Target.Value <> "", trong trường hợp Target.Count>1, lúc đó VBA không xác định được Target.Value là cái gì cả.Bác cho em hỏi: Với đoạn code ban đầu như trên, nếu không quan tâm đến chuyện dễ nhìn của người dùng mà em trình bày thành:
Tại sao khi chạy lại báo lỗi.Mã:If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 And Target(1,1).Value <> "" And Target.Value <> "" Then (Do something) End If
Tại sao khi chạy lại báo lỗi.Mã:If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 And Target(1,1).Value <> "" And Target.Value <> "" Then (Do something) End If
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Row > 10 And Target.Row < 100 Then
'And Target(1, 1).Value <> "" And Target.Value <> "" '
MsgBox Target(1, 1).Value, , Target(1, 1).Address
MsgBox Target.Value <> "", , Target.Address
'(Do something)'
End If
End Sub
Sư phụ có thể từ " Những" Thành Nhưng có thể dễ hiểu hơn. chúng em đôi lúc không hiểu. Cảm ơn sư phụ.Khakha. éc. éc .Ý bạn đang nói đến cái Target nào đây? Là Target trong các sự kiện Change, SelectionChange chăng?
- Trong sự kiện Change, Target là tất cả những cell có thay đổi số liệu
- Trong sự kiện SelectionChange, Target là tất cả những cell mà bạn quét chọn
Vậy nên Target có thể là 1 cell những cũng có thể là nhiều cell
Còn ActiveCell, đương nhiên là cell đang được active và nó luôn là 1 cell (cho dù bạn có đang chọn bao nhiêu cell)
Ví dụ: Bạn dùng chuột quét chọn từ B3 đến D6 thì:
- Ở trong sự kiện Selection, Target = B36
- ActiveCell = B3
Lưu ý: Nếu bạn quét ngược lại từ D6 đến B3 thì ActiveCell = D6
Tóm lại: trong khu vực Selection, cell nào sáng màu thì cell ấy là ActiveCell
Sư phụ có thể từ " Những" Thành Nhưng có thể dễ hiểu hơn. chúng em đôi lúc không hiểu. Cảm ơn sư phụ.Khakha. éc. éc .