Hello,
easy question, not so easy answer. For example I am struggling with Change event disabling Undo and I still didn't find a good workaround. Simply the code in the event, as soon as it executes the first formatting, it wipes the clipboard.
Your only (???) option may be to build a custom menu (I attached a sample workbook)
This goes into a normal module:
CODE
[color="blue"]Public[/color] [color="blue"]Const[/color] CB_TITLE [color="blue"]As[/color] [color="blue"]String[/color] = "My Menu"
[color="green"]'[/color]
[color="blue"]Public[/color] [color="blue"]Sub[/color] CreateToolbar()
[color="green"]'[/color]
[color="blue"]On[/color] [color="blue"]Error[/color] [color="blue"]Resume[/color] [color="blue"]Next[/color]
CommandBars(CB_TITLE).Delete
[color="blue"]On[/color] [color="blue"]Error[/color] [color="blue"]GoTo[/color] 0
[color="green"]'[/color]
[color="blue"]With[/color] CommandBars.Add(Name:=CB_TITLE)
[color="blue"]With[/color] .Controls.Add(Type:=msoControlButton)
.OnAction = "CustomCopy"
.FaceId = 19
.TooltipText = "Copy this"
[color="blue"]End[/color] [color="blue"]With[/color]
[color="blue"]With[/color] .Controls.Add(Type:=msoControlButton)
.OnAction = "CustomPaste"
.FaceId = 22
.TooltipText = "Paste"
[color="blue"]End[/color] [color="blue"]With[/color]
.Visible = [color="blue"]True[/color]
[color="blue"]End[/color] [color="blue"]With[/color]
[color="green"]'[/color]
[color="blue"]End[/color] [color="blue"]Sub[/color]
[color="green"]'[/color]
[color="blue"]Sub[/color] CustomCopy()
Application.EnableEvents = [color="blue"]False[/color]
[color="blue"]On[/color] [color="blue"]Error[/color] [color="blue"]GoTo[/color] Error_Handler
Selection.Copy
ExitHere:
[color="blue"]Exit[/color] [color="blue"]Sub[/color]
Error_Handler:
MsgBox Err.Description & [color="blue"]String[/color](2, vbLf) & "The Copy method failed."
Application.EnableEvents = [color="blue"]True[/color]
[color="blue"]GoTo[/color] ExitHere
[color="blue"]End[/color] [color="blue"]Sub[/color]
[color="green"]'[/color]
[color="blue"]Sub[/color] CustomPaste()
[color="blue"]With[/color] Application
.EnableEvents = [color="blue"]True[/color]
.Dialogs(xlDialogPasteSpecial).Show
[color="blue"]End[/color] [color="blue"]With[/color]
[color="blue"]End[/color] [color="blue"]Sub[/color]
And this goes into ThisWorkbook class module:
(You might want to use also Activate and Deactivate events)
CODE
[color="blue"]Private[/color] [color="blue"]Sub[/color] Workbook_BeforeClose(Cancel [color="blue"]As[/color] [color="blue"]Boolean[/color])
Application.EnableEvents = [color="blue"]True[/color]
[color="green"]'On Error Resume Next[/color]
Application.CommandBars(CB_TITLE).Delete
[color="blue"]End[/color] [color="blue"]Sub[/color]
[color="blue"]Private[/color] [color="blue"]Sub[/color] Workbook_Open()
CreateToolbar
[color="blue"]End[/color] [color="blue"]Sub[/color]
(attachment)
Martin