Hỏi cách dùng sự kiện Private Sub Worksheet_Deactivate() để code tự động chạy

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

LanAnh19

Thành viên chính thức
Tham gia
1/5/22
Bài viết
76
Được thích
8
Giới tính
Nữ
Em nhờ các anh giúp đỡ em như sau
Em có tạo code Copy_Paste_CotF(), để chạy công thức cho cột F của sheet MA
Mã:
Sub Copy_Paste_CotF()
Dim lr As Long
With Sheets("MA")
    lr = Sheets("MA").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("MA").Range("F13").Select
    Selection.Copy
    Sheets("MA").Range("F14:F" & lr).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End With
End Sub
Bây giờ em muốn code trên tự động chạy, mỗi khi em click qua sheet khác, nên em có tạo code khác trong sheet MA như sau
Mã:
Private Sub Worksheet_Deactivate()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
   
    Call Copy_Paste_CotF

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Nhưng khi click qua sheet khác thì code không tự động chạy
Nhờ các anh chị chỉ chổ sai để sửa. Em cảm ơn!
 

File đính kèm

  • Hoi.xlsm
    16.7 KB · Đọc: 9
Em nhờ các anh giúp đỡ em như sau
Em có tạo code Copy_Paste_CotF(), để chạy công thức cho cột F của sheet MA
Mã:
Sub Copy_Paste_CotF()
Dim lr As Long
With Sheets("MA")
    lr = Sheets("MA").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("MA").Range("F13").Select
    Selection.Copy
    Sheets("MA").Range("F14:F" & lr).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End With
End Sub
Bây giờ em muốn code trên tự động chạy, mỗi khi em click qua sheet khác, nên em có tạo code khác trong sheet MA như sau
Mã:
Private Sub Worksheet_Deactivate()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
  
    Call Copy_Paste_CotF

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Nhưng khi click qua sheet khác thì code không tự động chạy
Nhờ các anh chị chỉ chổ sai để sửa. Em cảm ơn!
Giờ bạn thử tưởng tượng nhé. Nếu tui đang ở Sheet "Ma" giờ tui nháy chọn sheet1 thì sự kiện Worksheet_Deactivate sẽ chạy (Lúc này sheet đang chọn là Sheet1) và gọi lệnh Copy_Paste_CotF, nhưng trong sub Copy_Paste_CotF lại chứa lệnh Sheets("MA").Range("F13").Select, mà lệnh này công dụng nó là gì ta???????
---Hết ý kiến---
 
Upvote 0
Em nhờ các anh giúp đỡ em như sau
Em có tạo code Copy_Paste_CotF(), để chạy công thức cho cột F của sheet MA
Mã:
Sub Copy_Paste_CotF()
Dim lr As Long
With Sheets("MA")
    lr = Sheets("MA").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("MA").Range("F13").Select
    Selection.Copy
    Sheets("MA").Range("F14:F" & lr).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End With
End Sub
Bây giờ em muốn code trên tự động chạy, mỗi khi em click qua sheet khác, nên em có tạo code khác trong sheet MA như sau
Mã:
Private Sub Worksheet_Deactivate()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
 
    Call Copy_Paste_CotF

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Nhưng khi click qua sheet khác thì code không tự động chạy
Nhờ các anh chị chỉ chổ sai để sửa. Em cảm ơn!
Bạn này viết code theo trường phái giống mình. Sai thì sửa, chửa thì đẻ.
_)(#; _)(#; _)(#;
Mã:
Option Explicit

Sub Copy_Paste_CotF()
    Dim lr As Long
    Application.CutCopyMode = False
    With Sheets("MA")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("F13:F" & lr).Formula = .Range("F13").Formula
    End With
    Application.CutCopyMode = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn này viết code theo trường phái giống mình. Sai thì sửa, chửa thì đẻ.
Bình thường thì thủ tục này "Copy_Paste_CotF" nên thử xem hoạt động tốt chưa rồi mới tính bước tiếp theo, đằng này chưa đâu vào đâu đã làm một mớ, theo kiểu "trăm mối tối nằm không".
 
Upvote 0
Bình thường thì thủ tục này "Copy_Paste_CotF" nên thử xem hoạt động tốt chưa rồi mới tính bước tiếp theo, đằng này chưa đâu vào đâu đã làm một mớ, theo kiểu "trăm mối tối nằm không".
Hehe, tớ làm sẽ sai và sửa dần thôi, trong lúc chờ cao thủ chuẩn bài thì có gì đó để tránh lạc trôi ấy mà.
 
Upvote 0
Bạn này viết code theo trường phái giống mình. Sai thì sửa, chửa thì đẻ.
..
Trường phái nào cũng được. Miễn là chịu khó dùng vài MsgBox (hay Debug.?) để biết hiện tại mình đang ở đâu, Sheet nào đang activate, ô nào đang là selection.
Cứ làm đại, khong thấy gì cả thì vào GPE la toáng lên là trường phái nào?
Quý vị lười biếng chứ một lần tôi debug code event là có cả chục MsgBox, Debug.?. Cửa sổ Immediate được Ctrl+A > Delete liên tục.
 
Upvote 0
Trường phái nào cũng được. Miễn là chịu khó dùng vài MsgBox (hay Debug.?) để biết hiện tại mình đang ở đâu, Sheet nào đang activate, ô nào đang là selection.
Cứ làm đại, khong thấy gì cả thì vào GPE la toáng lên là trường phái nào?
Quý vị lười biếng chứ một lần tôi debug code event là có cả chục MsgBox, Debug.?. Cửa sổ Immediate được Ctrl+A > Delete liên tục.
không phải người ta lười mà là người ta không biết cách check code giống bác. Theo em thấy bác này đang sử dụng record macro để viết code. Chứ ai cũng giỏi giống bác thì cần gì lên đây hỏi làm gì. Diễn đàn mình cần những người giỏi như bác để có thể chia sẽ kinh nghiệm sử dụng excel và VBA. Theo đó mọi người sẽ nắm được từ từ cách sử dụng excel cho hiệu quả.
 
Upvote 0
Code có chạy, tuy nhiên bạn mắc lỗi sai như sau:
1. khi sheet MA không active mà bạn chạy lệnh Sheets("MA").Range("F13").Select thì lập tức báo lỗi
2. sự kiện sheet deactive của bạn được gọi ra và thực hiện việc Application.EnableEvents = False. Lúc này xảy ra lỗi ở điểm 1 (bên trên) nên chương trình sẽ không bắt thêm sự kiện nào nữa.
Vậy là bạn chuyển sheet sẽ không chạy thêm sub Copy_Paste_CotF. vì lúc này đã ko enable event rồi
bạn cần enable lại event bằng code hoặc tắt excel ==> bật lại để tự enable event
 
Upvote 0
không phải người ta lười mà là người ta không biết cách check code giống bác. ...
Lười học cách check code. Làm việc đến bắt sự kiện mà bảo không biết check code thì là phi lý, hoặc học code kiểu đốt giai đoạn. Mà đối với tôi, học đốt giai đoạn là kiểu học lười.

Cách của tôi là căn bản nhất. Không cần phải học qua cách mở cửa sổ debug.
 
Upvote 0
Em nhờ các anh giúp đỡ em như sau
Em có tạo code Copy_Paste_CotF(), để chạy công thức cho cột F của sheet MA
...
Bây giờ em muốn code trên tự động chạy, mỗi khi em click qua sheet khác, nên em có tạo code khác trong sheet MA như sau
Tóm lại nhé: Muốn Copy vùng nào của sheet nào thì sheet đó phải được Active.
Mà đã Deactivate sheet đó rồi thì không copy được nữa
 
Upvote 0
Em nhờ các anh giúp đỡ em như sau
Em có tạo code Copy_Paste_CotF(), để chạy công thức cho cột F của sheet MA
Mã:
Sub Copy_Paste_CotF()
Dim lr As Long
With Sheets("MA")
    lr = Sheets("MA").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("MA").Range("F13").Select
    Selection.Copy
    Sheets("MA").Range("F14:F" & lr).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End With
End Sub
Bây giờ em muốn code trên tự động chạy, mỗi khi em click qua sheet khác, nên em có tạo code khác trong sheet MA như sau
Mã:
Private Sub Worksheet_Deactivate()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
  
    Call Copy_Paste_CotF

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Nhưng khi click qua sheet khác thì code không tự động chạy
Nhờ các anh chị chỉ chổ sai để sửa. Em cảm ơn!
Mình nhìn file của bạn thì đoán là bạn cần copy cái ô công thức tại F13 và điền xuống những dòng còn lại. Nếu đúng như vậy thì bạn hãy xóa hết code cũ, copy code này về để trong sự kiện của sheet "MA". Mỗi lần bạn rời khỏi sheet "MA" thì "quỷ" sẽ hiện.
Mã:
Private Sub Worksheet_Deactivate()
Dim lr As Long
With Sheets("MA")
    lr = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("F13:F" & lr).FillDown
End With
End Sub
 
Upvote 0
Lười học cách check code. Làm việc đến bắt sự kiện mà bảo không biết check code thì là phi lý, hoặc học code kiểu đốt giai đoạn. Mà đối với tôi, học đốt giai đoạn là kiểu học lười.

Cách của tôi là căn bản nhất. Không cần phải học qua cách mở cửa sổ debug.
Về khoản này bác giỏi nhất rồi. không ai dám cãi. nhưng đừng vội đánh giá người khác. Diễn đàn là nơi học hỏi chia sẽ chứ không phải đánh giá. người ta có sở trường riêng, và excel cũng như không phải sở trường của họ. họ chỉ sử dụng để hỗ trợ cho công việc khác chính của họ. Nên nhất thiết họ không phải học hành bài bản như bác. vì vậy họ mới lên đây để xin ý kiến. Chẳng liên quan đến lười hay không lười. Nếu có tâm thì chia sẽ để cùng nhau tốt lên.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom