Hỏi sự khác nhau giữa Target và ActiveCell (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
572
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 ?
 
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 = B3:D6
- 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
 
Upvote 0
Ý 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 = B3:D6
- 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

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 ??
 
Upvote 0
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 <> ""
Mà sao bạn không xem bài của mình tại đây nhỉ:
http://www.giaiphapexcel.com/forum/showthread.php?85576-Chuyên-mục-xử-lý-gỡ-rối-code-VBA&highlight=
 
Upvote 0
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 <> ""

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:
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.
 
Upvote 0
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:
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.
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ả.
 
Upvote 0
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.

Bạn thử chiêm nghiệm macro sau:

PHP:
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
 
Upvote 0
Ý 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 = B3:D6
- 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 .
 
Lần chỉnh sửa cuối:
Upvote 0
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 .

Thớt đã hơn nửa năm tròi. Tưởng đào lên có gì quan trọng, dè đâu nói chuyện lung tung.

Nếu muốn phân tích rõ theo ngôn ngữ, Target không phải là một từ khoá tỏng VBA. Từ Target mà không có phạm vi thì nó chả cos nghĩa là cái gì cả.

Thường thì ta gặp cái này nằm ở dạng tham số của hàm Worksheet_Change. Khi một hoặc vài ô nào đó trong sheet thay đổi, hiện tượng "Worksheet Change" được kích động, Excel gọi hàm Worksheet_Change và chuyền vùng ô bị thay đổi làm tham số cho nó. Khi viết code cho thân hàm Worksheet_Change, người viết có toàn quyền đặt tên cho tham số này. Nếu không đặt thì VBA mặc định tên là Target.

Lưu ý: nếu bạn đổi tên Target thành ra một tên khác, TeToTe chẳng hạn, bạn sẽ thấy code vẫn hoạt động như thường, hoàn toàn không có gì khác cả.

Khác hẳn với Target, Activecell là một từ khoá. Trong VBA nó là một thuộc tính của Windows, và nó chỉ thẳng vào ô đang hoạt động, tức là ô đang chứa con trỏ.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom