Tự động tạo nút lệnh và gán sự kiện cho button

Liên hệ QC

haingo08tlt

Thành viên mới
Tham gia
4/7/09
Bài viết
30
Được thích
1
Hi All !
Mình có đoạn code sau:
Sub createButton(ButtonName As String, ButtonTitle As String, actionName As String, Left As Integer, Top As Integer, Width As Integer, Height As Integer)
Dim butTemp
Set butTemp = ActiveSheet.Buttons.Add(Left, Top, Width, Height)
With butTemp
.Caption = ButtonTitle
.Name = ButtonName
.Font.Color = vbBlue
.OnAction = "'actionName'"
End With
Set butTemp = Nothing
End Sub

Tạo chạy thì ok rồi nhưng mắc phải vấn đề ở đây là mình truyền tham số actionName=macroName (ex: "gotoSheet(""Menu"")") . Khi đó mình click lên button thì nó báo macro actionName không tìm thấy.
Chừ mình truyền tham số cho actionName để khi click button thì sheet Menu được chọn. Với lại actionName là một String khi gán cho OnAction có phải đó là nguyên nhân click không đúng như ý muốn không?
Thank All !
 
Lần chỉnh sửa cuối:
Bạn viết sai cú pháp của đoạn

.OnAction = "'actionName'"

mà phải viết là:

.OnAction = actionName

Bạn viết 1sub:

Mã:
Sub Turn_Menu()
sheets("Menu").Activate
End sub

Giờ giả sử ta có sub yêu cầu tạo nút như sau:
Mã:
Private Sub Worksheet_Activate()
createButton "cmd1", "Ve Menu", "Turn_Menu", 0, 1, 100, 20
End Sub

Đảm bảo OK



 
Lần chỉnh sửa cuối:
Upvote 0
Mình cũng thử .OnAction=actionName
Nhưng vẫn không được. actionName đó là 1 string gán thế thì phát sinh lỗi
Mình gán thế này thì không phat sinh lỗi
.OnAction="'actionName'"
Nhưng khi tạo xong click button thì nó báo actionName not found
(ở đây actionName mình truyền vào là chuổi nhưng chuổi đó cũng tương ướng với 1 macro mình viết)
vidu: mình có macro Name
gotoSheet(SheetName as string)
lúc này mình truyền cho actionName sè là gotoSheet("Menu")
thế mà cũng không chạy. bạn này gặp rồi giúp mình với
Thank all !
 
Upvote 0
Bạn thử File của mình nhé. Bạn cứ thêm 1 sheet là nó tưh động tạo 1 nút trong sheet đó. Nhấn vào sẽ hiện thông báo "Hello! GPE"

Bạn lưu ý ActionName là tên Macro (Sub)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hi !
Minh thử thì ok rồi nhưng chừ cái sub có đối số thì như thế nào Ví dụ
Sub TBao(NameTP As String)
'Sheets("Sheet2").Activate
MsgBox "Hello! GPE " & NameTP
End Sub
Như thế này thì khi gọi sub TBao trong createButton mình truyền như thế nào.
Thank !
 
Upvote 0
Nếu đạt được ý của bạn chắc ta chạy luôn một đoan code nào đó chứ khỏi phải viết sẵn các sub chờ onAction gọi mà làm gì. Nhưng cũng không thiếu cách truyền tham số cho Code mà OnAction gọi. Bạn cứ thử mà xem.

Mình bổ xung thêm ý truyền tham số của bạn. Giả sử 7 giờ tạo nút không nhấn ngay, 10 giờ mới nhấn nút (Thậm chí đóng lại rồi mở lại) vậy thì cái tham số mà bạn muốn truyền nó nằm ở đâu chứ. Một khi đã để nó nằm ra sao thì lấy lại nó bất cứ lúc nào không khó
 
Lần chỉnh sửa cuối:
Upvote 0
Hi!
Tham số đó mình chứa ở 1 sheet. Rồi đọc dữ liệu ở sheet đó để truyền vào
Thank!
 
Upvote 0
Web KT

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

Back
Top Bottom