Phương thức lấy sự kiện khi Đổi tên sheet

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

Mr.hieudoanxd

Thành viên thường trực
Tham gia
25/10/19
Bài viết
322
Được thích
150
Xin chào mọi người trong diễn đàn!
Trong quá trình mày mò để tạo lập Addin, em đang tìm cách để Bắt các sự kiện của ActiveWorkbook khi code đang viết ở Addin. Em có hỏi riêng anh Hoàng Trọng Nghĩa thì được anh chỉ làm theo ClassModule, tuy nhiên ClassModule em vẫn chưa tìm hiểu được gì. Tìm hiểu thêm trên StackOverflow thì em được vài thông tin sau: Tạo một biến ExcelApp thuộc Excel.Application để viết các sự kiện ở Excel.Application như thế có thể bắt được các sự kiện ở tất cả các workbook. Sau khi mày mò thì cũng đã ra được một số vấn đề các anh xem và mở file đính kèm ở dưới "Addin Test.xlam" và "File Test.xlsx"
- Trong "File test.xlsx" có 1 sheet là PopUp tại sheet này nếu ấn chuột phải và có thêm PopUp mới là "Đây là PopUp"
(các sheet khác thì không hiện PopUp mới này).
- Click chọn PopUp này sẽ hiện Userform thể hiện các sheet có trong "File test.xlsx".
- Các sự kiện Xóa sheet, thêm sheet em đã bắt được, khi xóa, thêm tại "File test.xlsx" đều được cập nhật vào userform
Câu hỏi em đặt ra là: với các sự kiện không có trong sự kiện có sẵn thì bắt như thế nào? ví dụ đổi tên sheet, ẩn sheet.........
 

File đính kèm

  • Addin Test.xlam
    34.3 KB · Đọc: 4
  • File Test.xlsx
    10.5 KB · Đọc: 2
Bạn đã bao giờ ghé qua add-in VBFastCode, trong đó gần như có đầy đủ mọi căn bản VBA mà một coder có thể xem lại hoặc học thêm.

Untitled.jpg

add-in sắp tới tôi sẽ cập nhật bản siêu học tập nhanh nhất cho một người chưa biết gì đến VBA.

 
Upvote 0
Bạn đã bao giờ ghé qua add-in VBFastCode, trong đó gần như có đầy đủ mọi căn bản VBA mà một coder có thể xem lại hoặc học thêm.

View attachment 286734

add-in sắp tới tôi sẽ cập nhật bản siêu học tập nhanh nhất cho một người chưa biết gì đến VBA.

Em vẫn luôn theo dõi các bài viết của anh! bài này em cũng đã tải về. tuy nhiên em học ngang, thời gian cũng không nhiều nên đa phần học theo kiểu con vẹt không hiểu sâu vấn đề. Với em, code em áp dụng được thì em phải hiểu chút ít về nó và có thể chỉnh sửa được theo ý của em. Các code của anh viết gần như em không học được gì vì quá khó hiểu và khó chỉnh sửa (có thể do em kém)!. Với bài viết của em anh có chỉ dẫn gì không anh?
 
Upvote 0
Trong hình bạn sẽ nhìn thấy, có WithEvents
 
Upvote 0
Trong hình bạn sẽ nhìn thấy, có WithEvents
Anh có thể hướng dẫn chi tiết hơn không ạ?.
Em có tìm được 1 file sử dụng Class Event bắt sự kiện thay đổi vị trí sheet, đổi tên sheet và một số sự kiện khác . Nhưng thú thật cứ động đến Clas Event là em tịt. Em Upload lên để mọi người xem có thể hướng dẫn em không?
 

File đính kèm

  • Test rename sheet.xlsm
    35 KB · Đọc: 6
Upvote 0
Theo tôi đoán thì Application Excel không có hỗ trợ các sự kiện bạn cần
 
Upvote 0
Đã không có thì làm sao mà tạo Class được.
 
Upvote 0
Có ai biết đâu mà trả lời, kể cả người ấy.
Có gì đâu mà không biết, nhìn code là thấy ngay. Code dùng sự kiện CommandBars_OnUpdate - một sự kiện rất nhạy, có thể nói bất kỳ thao tác nào cũng làm kích hoạt sự kiện này. Do bất kỳ thao tác nào cũng làm kích hoạt sự kiện nên cần phải kiểm tra xem có phải sự kiện được kích hoạt do đổi tên sheet hay di chuyển sheet... không bằng cách so sánh thông tin các sheet trước khi sự kiện xảy ra (được lưu vào Dictionary) và sau khi sự kiện xảy ra.

Do CommandBars_OnUpdate là sự kiện rất nhạy nên sự kiện sẽ được kích hoạt rất nhiều lần nếu được sử dụng. Microsoft cũng khuyến cáo cần thận trọng khi sử dụng. Theo tôi thì cách này không ổn.
 
Upvote 0
Hà hà. Không nói thì mấy tướng đâu xung trận.
 
Upvote 0
Có gì đâu mà không biết, nhìn code là thấy ngay. Code dùng sự kiện CommandBars_OnUpdate - một sự kiện rất nhạy, có thể nói bất kỳ thao tác nào cũng làm kích hoạt sự kiện này. Do bất kỳ thao tác nào cũng làm kích hoạt sự kiện nên cần phải kiểm tra xem có phải sự kiện được kích hoạt do đổi tên sheet hay di chuyển sheet... không bằng cách so sánh thông tin các sheet trước khi sự kiện xảy ra (được lưu vào Dictionary) và sau khi sự kiện xảy ra.

Do CommandBars_OnUpdate là sự kiện rất nhạy nên sự kiện sẽ được kích hoạt rất nhiều lần nếu được sử dụng. Microsoft cũng khuyến cáo cần thận trọng khi sử dụng. Theo tôi thì cách này không ổn.
Em tò mò về vấn đề này thì khá lâu rồi nhưng chỉ thực sự tìm hiểu về nó khi xem video của anh ở bài này. Thật ra nếu bắt sự kiện đổi tên sheet muộn hơn một chút bằng việc cập nhật ở sự kiện SheetActive cũng được nhưng nó vẫn sẽ gặp lỗi nếu ngay lập tức click vào listbox của useform luôn ngay khi mình đổi tên. Của anh, và file em tải ở bài #5 thì là đổi tên ngay tức thì. File Bài viết thì anh không chia sẻ rồi, em chỉ hỏi là nếu không bắt buộc phải sử dụng Class Module thì còn cách nào khác và nếu có thì anh có thể sơ bộ hướng làm được không?. (Em muốn tự mình tìm hiểu thôi)
 
Upvote 0
Mục đích của bạn là muốn viết Form để chuyển trang tính, nếu trang đổi tên hoặc xóa hoặc ẩn đều cho Form biết các sự kiện để chỉnh các nút trên Form.

OnUpdate luôn luôn chạy khi bạn thao tác bất kì hành động chuột nào, nên bạn có thể tận dụng nó. Bạn chỉ cần sửa trong thủ tục sự kiện appCmdBars_OnUpdate. Tuy nhiên tốt nhất bạn nên tạo nút refresh thay vì sự kiện.
 
Upvote 0
Em tò mò về vấn đề này thì khá lâu rồi nhưng chỉ thực sự tìm hiểu về nó khi xem video của anh ở bài này. Thật ra nếu bắt sự kiện đổi tên sheet muộn hơn một chút bằng việc cập nhật ở sự kiện SheetActive cũng được nhưng nó vẫn sẽ gặp lỗi nếu ngay lập tức click vào listbox của useform luôn ngay khi mình đổi tên. Của anh, và file em tải ở bài #5 thì là đổi tên ngay tức thì. File Bài viết thì anh không chia sẻ rồi, em chỉ hỏi là nếu không bắt buộc phải sử dụng Class Module thì còn cách nào khác và nếu có thì anh có thể sơ bộ hướng làm được không?. (Em muốn tự mình tìm hiểu thôi)
Hiện tại bạn bắt sự kiện Worksheet_Activate bằng cách nào mà không dùng Class Module?
 
Upvote 0
Hiện tại bạn bắt sự kiện Worksheet_Activate bằng cách nào mà không dùng Class Module?
Thật ra thì không hẳn là bắt mà em cập nhật lại khi anh Click lựa chọn sheet khác thôi anh!
 

File đính kèm

  • Addin Test.xlam
    33.5 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom