gpt4 book ai didi

vba - Excel-VBA : Adding a button clears the clipboard - workaround needed

转载 作者:行者123 更新时间:2023-12-04 20:58:42 26 4
gpt4 key购买 nike

好的,所以我有一些工作表代码可以检测何时选择了范围内的单元格并在其旁边创建一个按钮。一切似乎都很好,但是有关创建按钮的某些内容会清除剪贴板。 Here's the original code that is called whenever a cell in the relevant range is selected:

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)。我得到的是一条错误消息:“剪贴板上的数据与所选区域的大小和形状不同”,如果我点击确定,它只会粘贴到单个单元格。我知道源和目标的大小不同,但是在工作表的其他地方复制/粘贴时效果很好。显然我在读/写剪贴板时做了一些奇怪的事情,但我不知道是什么。

最佳答案

好的,所以 Excel 在这里的每一步都与我战斗。本质上,如前所述,界面中的任何更改都会删除剪贴板。因此,就我而言,当我选择一个目标单元格时,我自己的代码是在旁边插入一个新按钮并删除剪贴板。

出于某种原因,在第二次尝试中尝试复制剪贴板被证明是非常不可靠的。无论如何,答案是使用不同的列来触发按钮生成,所以当我选择粘贴的目标单元格时,剪贴板保持不变。

作为最后一个问题,请注意,如果单元格受到保护,则用于检测何时选择单元格(这是我正在使用的)的工作表级代码不起作用......

关于vba - Excel-VBA : Adding a button clears the clipboard - workaround needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41448582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com