Worksheet_SelectionChange(ByVal Target As Range)

Liên hệ QC

emgaingayngo

Thành viên hoạt động
Tham gia
9/2/07
Bài viết
141
Được thích
5
Trong Event trên các bạn cho mình hỏi:
Target có nghĩa là gì vậy? Sử dụng ntn cho đúng?
Tại sao lại có ByVal?
Ví dụ : mình muốn dùng target là range("A1:T65536") thì dùng câu lệnh gì?
Thanks Much!
 
Chào bạn,

Target là vùng địa chỉ ô hay các ô mà bạn đang chọn trên bảng tính, do vậy nếu bạn dùng sự kiện này thì mỗi khi có sự thay đổi trong vùng bạn chọn thì sự kiện sẽ được thực thi.

Mình mượn giải thích sau từ diễn đàn caulacbovb

+ Byval: là từ viết tắt của By Value, nghĩa là truyền bằng trị. Phương pháp này không làm thay đổi giá trị của nội dung của biến khai báo bởi từ khóa Byval
+ Byref: là từ viết tắt của By Reference, nghĩa là truyền bằng tham khảo. Phương pháp này cho phép thay đổi nội dung của biến được khai báo bởi từ khóa Byref. Mục đích là nếu ta muốn trả về nhiều giá trị chứ không phải 1 thì ta dùng cách này. Nếu chỉ trả về 1 giá trị thì ta trả về giá trị của hàm thôi. Các bạn cứ xem ví dụ dưới đây sẽ hiểu rõ ah:

VD phân biệt 2 từ khóa Byval và Byref

Public Function GetDateFromString(ByVal sDate As String, ByRef iDay As Integer, ByRef iMonth As Integer, ByRef iYear As Integer) As Long
On Error GoTo Loi
Dim aDate As Date
aDate = Format(sDate, "dd/mm/yyyy")
iDay = Day(aDate) ' Trả về ngày cho biến iDay
iMonth = Month(aDate) ' Trả về tháng cho biến iMonth
iYear = Year(aDate) ' Trả về năm cho biến iYear
GetDateFromString = 1
Exit Function
Loi:
GetDateFromString = 0
End Function


Khi đó, muốn sử dụng hàm GetDateFromString thì ta làm như sau

Dim a As Integer, b As Integer, c As Integer ' Khai báo các biến trả về cho iDate, iMonth, iYear
If GetDateFromString("29/06/2006", a, b, c) = 1 Then ' Nếu không xảy ra lỗi
MsgBox a & "," & b & "," & c ' Khi này các biến a,b,c đã được hàm trả về giá trị của nó
End If

Bạn dùng câu lệnh sau:
Target.Address

Với Address là vùng địa chỉ A1:T65536 mà bạn đang chọn

TP.
 
Upvote 0
emgaingayngo đã viết:
Không có gì hiện ra hết bạn ơi.

Trời, Target là 1 cell thôi bạn ạ.
Bạn hãy thay bằng :
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:T65536")) Is Nothing Then FrmThu.Show
End Sub



Mà sao cần đến 65536 ??? Nhiều thế em ??
Thân!
 
Upvote 0
SoiBien đã viết:
Target la 1 range lan. OKE oi!

Đúng là target là 1 range (gồm 1 hay nhiều cell)

Nhưng trong trường hợp này thì bạn ấy lấy giá trị từ A1:T65536, nghĩa là nếu cứ theo code của bạn ấy thì ta phải chọn đồng thời A1:T65536 thì mới có tác dụng. Trong khi bạn ấy lại muốn chọn 1 ô bất kỳ trong A1:T65536 thì cũng hiển thị Form.

Xin lỗi vì đã viết tắt, dáng lẽ phải là : Trong TH này, target chỉ nên là 1 cell thôi.

Cảm ơn bạn.
 
Upvote 0
emgaingayngo đã viết:
Không có gì hiện ra hết bạn ơi.

Van de cua emgai la khi ban chon het ca cot nhu vay, excel chi tra ve ten cot ($A:$T)

Vay ban phai sua code lai :
If Target.Address = "$A:$T" Then FrmThu.Show
Than.
may khong co chuong tirnh go ieng Viet, admin thong cam nhe.
 
Upvote 0
SoiBien đã viết:
Van de cua emgai la khi ban chon het ca cot nhu vay, excel chi tra ve ten cot ($A:$T)

Vay ban phai sua code lai :
If Target.Address = "$A:$T" Then FrmThu.Show
Than.
may khong co chuong tirnh go ieng Viet, admin thong cam nhe.

Như vậy có vẻ không logic bạn ạ, vì nếu vậy, muốn show form thì phải chọn tất cả cột A:T, đây là một việc rất mất công sức thay vì chỉ cần chọn 1 ô bất kỳ trong vùng đó.

Mong xem lại.

Thân!
 
Upvote 0
Web KT

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

Back
Top Bottom