Cho hỏi: Mục đích sử dụng của bạn là gì vậy? Trước giờ chưa thấy dạng yêu cầu nàyCám ơn bạn Pozsi đã quan tâm.
Ý mình là dùng macro để tự động tạo sự kiện change cho Sheet1 thay vì phải vào cửa sổ VBA (từ Excel bấm Alt+F11), DblClick vào Sheet1 rồi chọn Worksheet và sự kiện Change.
Cho hỏi: Mục đích sử dụng của bạn là gì vậy? Trước giờ chưa thấy dạng yêu cầu này
(biết mục đích, có khi có cách khác hay hơn)
Làm vậy chi cho cực!Chào Anh ndu96081631!
Mục đích của em là: tạo một số tiện ích hỗ trợ người dùng excel khi muốn sử dụng sự kiện change nào đó cho sheet.. có tên nào đó (ở đây em hỏi cho sheet1 để cho tiện) thì chỉ cần vào menu và chọn tạo sự kiện và chọn sheet cần tạo là sự kiện đó tự chèn vào sheet. Cám ơn Anh nhiều và rất mong nhận được sự giúp đỡ của Anh.
Anh ndu96081631 ơi!
Sở dĩ em không viết trực tiếp trên Worksheet_Change được là vì Workbook đó không phải do mình tạo ra (người dùng sử dụng Workbook bất kỳ, chỉ khi cần tiện ích thì chọn thôi), phần menu và code xử lý trong sự kiện thì em đã làm xong rồi. Cám ơn Anh nhiều và mong nhận được ý kiến của Anh.
ban cho minh xin file với. Cảm ơn bạn nhiều.Cám ơn Trời, cảm ơn Cao thủ TuanVNUNI!
Em đã làm theo phương pháp của anh, thật là tuyệt vời, trên cả sự mong đợi.
Chỉ có điều phải sử dụng biến toàn cục (Option Explicit_nhưng không sao, em đã khắc phục việc khai báo các biến của em lại).
Em sử dụng code của anh và chỉ cần thêm vào Select case ActiveSheet.Name là có thể chọn áp dụng sự kiện (Worksheet_Change hoặc Worksheet_SelectionChange) cho Worksheet nào mình muốn. Áp dụng cho tất cả các Workbook bất kỳ.
Chân thành cảm ơn anh. Chúc anh luôn vui!
Bước 1: bạn cho code này vào moduleban cho minh xin file với. Cảm ơn bạn nhiều.
Public dim_WsChange As WsChange 'khai bao su kien thao tac tren sheet
Public Sub KhoiTaoLaiSuKien()
If dim_WsChange Is Nothing Then
Set dim_WsChange = New WsChange'<=chỗ này khai báo class
dim_WsChange.CreateApp Application'<= chỗ này khởi tạo sự kiện
End If
End Sub
'=========================================================================
' CLASS SU KIEN THAO TAC VOI BANG TINH
'=========================================================================
Option Explicit
Private WithEvents ExcelApp As Excel.Application
Public Sub CreateApp(ByVal AppExcel As Excel.Application)
If ExcelApp Is Nothing Then Set ExcelApp = AppExcel
End Sub
Private Sub Class_Initialize()
If Not ExcelApp Is Nothing Then Set ExcelApp = Nothing
End Sub
Private Sub Class_Terminate()
If Not ExcelApp Is Nothing Then Set ExcelApp = Nothing
End Sub
Private Sub ExcelApp_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
msgbox "Ban vua thuc hien thao tac DoubleClick"
End Sub
Private Sub ExcelApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
msgbox "Ban vua thuc hien thao tac SheetChange"
End Sub
Private Sub ExcelApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
msgbox "Ban vua thuc hien thao tac SheetSelectionChange"
End Sub
Private Sub ExcelApp_SheetActivate(ByVal Sh As Object)
msgbox "Ban vua thuc hien thao tac SheetActivate"
End Sub
mình không phải là giáo viên cũng chưa từng dạy ai nên đừng gọi là thầy bạn nhé.Thầy Mutants Men cho em thắc mắc tí được không ạ? Em cũng mới nghe đến Class nên hỏi củ chuối mong thầy đừng cười. Em làm theo các bước thầy hướng dẫn phía trên thì ok, nhưng hình như mỗi lần tạo sheet mới phải chạy lại Sub KhoiTaoLaiSuKien đúng không thầy? Nếu đúng vậy thì có cách nào tạo sheet mới mà các sự kiện vẫn y nguyên như sheet cũ, không cần chạy lại Sub KhoiTaoLaiSuKien không ạ?
ý bạn là tạo Sheet mới hay tắt File rồi mở lại?hình như mỗi lần tạo sheet mới
Private Sub Auto_Open()
KhoiTaoLaiSuKien
End Sub
Private Sub Auto_Close()
If Not dim_WsChange is nothing then Set dim_WsChange = nothing
End Sub
cách khác nó là Autpen đó bạnEm giải quyết bằng Workbook_Open rồi ạ. Cảm ơn thầy Mutants Men nhiều
DIỄN ĐÀN GIẢI PHÁP EXCEL