我很困惑,当创建一个自动大小按钮时,Excel会无缘无故地丢弃剪贴板"复制"选项。
考虑这个简单的选择更改处理程序:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim P As Button: Set P = ActiveSheet.Buttons.Add(1, 1, 100, 100)
End Sub
这简单地在每个单元格选择更改时在工作表的左上角创建一个哑按钮。
如果你在任何单元格中按下Ctrl-C(不管它是否为空),单元格将有这个漂亮的边框,表明如果你在其他地方选择粘贴,所选择的内容将被粘贴。
即使在工作表上进行导航,该边框也将保持可见。
现在添加一行:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim P As Button: Set P = ActiveSheet.Buttons.Add(1, 1, 100, 100)
P.AutoSize = True
End Sub
这将使按钮自动调整大小。工作很好。但是从现在开始,每次选择的改变都会破坏剪贴板的"复制"选择。
- 为什么?我能防止这种情况发生吗?
用Excel 10 14.0.7116.5000 32位复制:-O
如果你已经复制了内容,那么你需要在其他事情发生之前粘贴它。这是Excel的自然行为。
因此,在您的事件中,您可以在自动调整按钮大小之前粘贴内容(到当前活动单元格)。
Dim P As Button
If Application.CutCopyMode = xlCopy Then
Me.Paste
End If
Set P = ActiveSheet.Buttons.Add(1, 1, 100, 100)
'Application.EnableEvents = False
P.AutoSize = True
'Application.EnableEvents = True
EnableEvents
在这里是不必要的,但我包含它是为了说明如何防止事件第二次触发。您可能需要在某些时候使用它