Addin tự làm không nhận được lệnh của Code trong ThisWorkbook

Liên hệ QC

banhchuoichien

Thành viên mới
Tham gia
27/4/09
Bài viết
31
Được thích
13
Xin chào các anh (chị)
Hiện tại em đang nghiên cứu về Excel và công cụ lập trình VBA, VB.net. Do mới tập làm nên còn vướng nhiều chỗ mong anh (chị) chỉ giúp.
Mục đích: Tạo 1 addin Gosheets&Insertrows với 2 modul để làm việc nhanh hơn
2 modul như sau:

Sub IndexCode()
Application.CommandBars("workbook Tabs").ShowPopup
End Sub
Sub Chendong()
Dim i As Integer
Dim n As Integer
n = Application.InputBox("Nhap so dong can chen: ")
For i = 1 To n Step 1
Selection.Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Next i
End Sub

Và 1 code trong workbook như sau: (Cái này em hok biết gọi là modul hay class modul, ai biết gọi dùm)

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim cCont As CommandBarButton
Dim A As CommandBarButton
On Error Resume Next
Application.CommandBars("Cell").Controls("Go Sheet").Delete
Application.CommandBars("Cell").Controls("Chen dong").Delete
On Error GoTo 0
Set cCont = Application.CommandBars("Cell").Controls.Add _
(Type:=msoControlButton, Temporary:=True)
Set A = Application.CommandBars("Cell").Controls.Add _
(Type:=msoControlButton, Temporary:=True)
With cCont
.Caption = "Go Sheet"
.OnAction = "IndexCode"
End With
With A
.Caption = "Chen dong"
.OnAction = "chendong"
End With
End Sub

Khi chạy trên file thì code trong Thisworkbook vẫn hoạt động bình thường nhưng khi chuyển qua thành Addin và dùng cho file khác lại không nhận.
Mong các anh (chị) chỉ dùm cách khắc phục.
Cảm ơn các anh (chị) nhiều.
 
Lần chỉnh sửa cuối:
Nếu chuyển thành Add-Ins thì không thể chuyển nguyên dạng như thế được đâu bạn. Bạn hiểu rằng thủ tục Workbook_SheetBeforeRightClick chi áp dụng cho workbook hiện hành thôi. Do đó, bạn chỉ có thể chuyển sub IndexCode, Chendong vào Add-Ins, còn thủ tục workbook_SheetBeforẻightClick thì vẫn phải ở workbook để gọi IndexCode và Chendong ra để chạy.
 
Nếu chuyển thành Add-Ins thì không thể chuyển nguyên dạng như thế được đâu bạn. Bạn hiểu rằng thủ tục Workbook_SheetBeforeRightClick chi áp dụng cho workbook hiện hành thôi. Do đó, bạn chỉ có thể chuyển sub IndexCode, Chendong vào Add-Ins, còn thủ tục workbook_SheetBeforẻightClick thì vẫn phải ở workbook để gọi IndexCode và Chendong ra để chạy.
Điều này vẫn có thể làm được bằng cách dùng class, khai báo biến kiểu Application với WithEvents. Tạo thủ tục sự kiện. Trong module thêm Sub Auto_Open() khởi tạo class đó bằng lệnh New. Save dưới dạng addin. Có khi tác giả quên chạy addin đó trong addin manager cũng nên.
 
Re:

Cảm ơn anh đã góp ý.
 
Lần chỉnh sửa cuối:
Re:

Cảm ơn anh đã góp ý.
Anh có thể hướng dẫn chi tiết hơn về class như thế nào không. Em cũng chưa rành về cấu trúc class cho lắm.
 
Cảm ơn anh đã góp ý.
Anh có thể hướng dẫn chi tiết hơn về class như thế nào không. Em cũng chưa rành về cấu trúc class cho lắm.
bạn có thể xem http://www.giaiphapexcel.com/forum/showthread.php?3868-Class-module-Kỹ-thuật-Tạo-và-Wrap-đối-lượng để hiểu thêm. Mình thì chịu. Code đơn giản ví dụ addin khi mở file xuất hiện thông báo tên workbook: tạo workbook, thêm class1 và module. Sau khi thêm code thì save dạng addin rồi kích hoạt addin. Sau đó mở workbook bất kỳ sẽ hiện msgbox có tên workbook.
Code class1
Mã:
Public WithEvents xxx As Application
Private Sub xxx_WorkbookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name
End Sub
code module
Mã:
Dim abc As Class1
Sub auto_open()
Set abc = New Class1
Set abc.xxx = Application
End Sub
 
Web KT

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

Back
Top Bottom