好的,所以我有一些工作表代码可以检测某个范围内的单元格何时被选中并在其旁边创建一个按钮。一切似乎都没问题,但有关创建按钮的事情会清除剪贴板。这是在选择相关范围内的单元格时调用的原始代码:
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,就会清除剪贴板。为什么,我不知道。
从逻辑上考虑它,我添加了一些额外的代码行来清除它之前捕获剪贴板并在子结尾处替换它,所以我最终得到了这个:
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
现在,这是有效的,但仅限于一点。所以我选择范围内的一个单元格并复制它(Ctrl-C),我现在在相同的范围内选择(比方说)3个单元格并尝试粘贴(Ctrl-V)。我得到的是一条错误消息:“剪贴板上的数据不是与所选区域相同的大小和形状”,如果我点击OK,它只会粘贴到单个单元格。我知道源和目标是不同的大小,但在工作表的其他地方,这在复制/粘贴时工作正常。很明显,我在读/写剪贴板时做了一些奇怪的事情,但我不知道是什么。
答案 0 :(得分:0)
好的,所以Excel在这里的每一步都真的和我搏斗。实质上,如前所述,界面中的任何更改都会擦除剪贴板。所以在我选择目标单元格的情况下,我自己的代码是在旁边插入一个新按钮并擦除剪贴板。
由于某种原因,在我第二次尝试时尝试复制剪贴板被证明是非常不可靠的。无论如何,答案是使用不同的列来触发按钮生成,因此当我为粘贴选择目标单元格时,剪贴板保持不变。
作为最后的问题,请注意,如果单元格受到保护,用于检测何时选择单元格(我正在使用的单元格)的单层级代码不起作用...