Giải phóng biến đặt

  • Thread starter Thread starter Minda
  • Ngày gửi Ngày gửi
Liên hệ QC

Minda

Thành viên mới
Tham gia
5/4/11
Bài viết
21
Được thích
4
Tôi có đoạn code sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, MyR As Range
    Application.ScreenUpdating = False
    Set rng = S1.Range(S1.[A1], S1.[A65000].End(3))
    Set MyR = rng.Find(Range("B1").Value, , xlValues, xlWhole)
    On Error Resume Next
    If Target.Address = "$B$1" Then
        If MyR = "" Then MsgBox "Khong tim thay ma nay. Hay kiem tra lai!"
        If MyR = Range("B1").Value Then
            Range("A6:B65000").Clear
            With S1.Range(S1.[A1], S1.[A65000].End(3)).Resize(, 3)
                .AutoFilter 1, Range("B1").Value
                .Offset(1, 1).Resize(, 2).SpecialCells(12).Copy [A6]
                .AutoFilter
            End With
        End If
    End If
End Sub
Trong đoạn code này tôi đã đặt 2 biến: rng và MyR. Và tôi đã set 2 biến này. Vậy cuối sự kiện tôi có cần phải giải phóng 2 biến này?
 

File đính kèm

Lần chỉnh sửa cuối:
Set MyR = Nothing sẽ tạo thói quen tốt cho người lập trình

Nhưng vì lí do gì đó bạn không xài câu lệnh đó thì biến đó sẽ tự huỷ khi gặp End Sub (Trừ fi chương trình dừng giữa chừng vì 1 lý do nào đó chưa lường)

Chúc vui!
 
Upvote 0
Set MyR = Nothing sẽ tạo thói quen tốt cho người lập trình
Vậy viết thêm:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, MyR As Range
    Application.ScreenUpdating = False
    Set rng = S1.Range(S1.[A1], S1.[A65000].End(3))
    Set MyR = rng.Find(Range("B1").Value, , xlValues, xlWhole)
    On Error Resume Next
    If Target.Address = "$B$1" Then
        If MyR = "" Then MsgBox "Khong tim thay ma nay. Hay kiem tra lai!", , "LTD"
        If MyR = Range("B1").Value Then
            Range("A6:B65000").Clear
            With S1.Range(S1.[A1], S1.[A65000].End(3)).Resize(, 3)
                .AutoFilter 1, Range("B1").Value
                .Offset(1, 1).Resize(, 2).SpecialCells(12).Copy [A6]
                .AutoFilter
            End With
        End If
    End If
    Set rng = Nothing
    Set MyR = Nothing
End Sub
Vậy em đã giải phóng biến như vậy được chưa ah?
Xin cho em hỏi thêm: Mình có phải giải phóng các biến này theo thứ tự?
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy viết thêm:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, MyR As Range
    Application.ScreenUpdating = False
    Set rng = S1.Range(S1.[A1], S1.[A65000].End(3))
    Set MyR = rng.Find(Range("B1").Value, , xlValues, xlWhole)
    On Error Resume Next
    If Target.Address = "$B$1" Then
        If MyR = "" Then MsgBox "Khong tim thay ma nay. Hay kiem tra lai!", , "LTD"
        If MyR = Range("B1").Value Then
            Range("A6:B65000").Clear
            With S1.Range(S1.[A1], S1.[A65000].End(3)).Resize(, 3)
                .AutoFilter 1, Range("B1").Value
                .Offset(1, 1).Resize(, 2).SpecialCells(12).Copy [A6]
                .AutoFilter
            End With
        End If
    End If
    Set rng = Nothing
    Set MyR = Nothing
End Sub
Vậy em đã giải phóng biến như vậy được chưa ah?
Xin cho em hỏi thêm: Mình có phải giải phóng các biến này theo thứ tự?
Với code trên thì thật sự không cần giải phóng gì cả (mặc dù có cũng không sao)
Tuy nhiên, nếu lo âu thì đừng có xài... Dùng With... End With cho khỏe
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$1" Then
    Range("A5:B65000").Clear
    With S1.Range(S1.[A1], S1.[A65000].End(3))
      .AutoFilter 1, Target.Value
      .Offset(, 1).Resize(, 2).SpecialCells(12).Copy Range("A5")
      .AutoFilter
    End With
  End If
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom