剪贴板"复制"自动调整VBA按钮时选择是否消失?

时间:2014-05-23 15:24:44

标签: excel-vba excel-2010 vba excel

我很困惑,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

1 个答案:

答案 0 :(得分:0)

如果您复制了内容,则需要在发生其他任何事情之前将其粘贴。这就是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在这里是不必要的,但我已将其包含在内,以说明如何阻止事件再次触发。你可能需要在某个时候使用它。