Excel-VBA:添加一个button清除剪贴板 – 需要解决方法

好的,所以我有一些工作表代码,用于检测某个范围内的某个单元格是否被选中,并在旁边创build一个button。 一切似乎都没问题,但创buildbutton的事情清除了剪贴板。 以下是在相关范围内的单元格被选中时调用的原始代码:

Public Sub splitTransactionIn(ByVal Target As Range) Dim btn As Button Set t = ActiveSheet.Range("E" & Target.Row) rowNumber = Target.Row On Error Resume Next ActiveSheet.Buttons("Split").Delete Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height) With btn .OnAction = "btnIn" .Caption = "Split transaction" .Name = "Split" End With End Sub 

我尝试将部分注释掉并插入断点,只要.OnAction,.Caption或.Name都到达,剪贴板将被清除。 为什么,我不知道。

从逻辑上考虑,我添加了一些额外的代码行,在清除之前捕获剪贴板并将其replace到子结尾,所以我最终得到了这个结果:

 Public Sub splitTransactionIn(ByVal Target As Range) Dim btn As Button Dim objData As New MSForms.DataObject Dim strText objData.GetFromClipboard strText = objData.GetText() Set t = ActiveSheet.Range("E" & Target.Row) rowNumber = Target.Row ' gets used elsewhere... On Error Resume Next ActiveSheet.Buttons("Split").Delete Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height) With btn .OnAction = "btnIn" .Caption = "Split transaction" .Name = "Split" End With objData.SetText strText objData.PutInClipboard End Sub 

现在,这个工作,但只有一点。 所以我select一个范围内的单元格并复制它(Ctrl-C),我现在select(比如说)在相同范围内的3个单元格,然后尝试粘贴(Ctrl-V)。 我得到的是一个错误消息:“剪贴板上的数据与选定区域的大小和形状不一样”,如果我点击“确定”,则只粘贴到单个单元格。 我知道源和目标是不同的大小,但在工作表中的其他地方这工作正常复制/粘贴时。 很显然,我在阅读/书写剪贴板方面做了一些奇怪的事情,但我不知道是什么。

好的,所以Excel在这里的每一步都真的和我搏斗了。 实质上,如前所述,界面上的任何更改都会擦除剪贴板。 所以在我的情况下,当我select一个目标单元格,我自己的代码插入一个新的button并擦除剪贴板。

试图复制剪贴板,因为我第二次尝试的尝试certificate是非常不可靠的,出于某种原因。 无论如何,答案是使用不同的列来触发button的生成,所以当我select一个目标单元格粘贴,剪贴板保持不变。

作为最后的疑难杂症,请注意,如果单元格被保护,单元格被选中(这是我正在使用的)单元格级别的代码检测不起作用…