1

背景

我有一个 Excel 2007 表单,用户在其中将一些数据输入到文本框中,如果他们单击“确定”命令按钮,则会根据该文本运行一个宏。但是,如果他们从其他地方(例如Ctrl + C)复制字符串,然后第一次粘贴并按 OK,则复制缓冲区似乎已被清除;如果他们再次尝试在任何地方再次粘贴,则不会发生任何事情。但是,如果他们单击“取消”命令按钮,他们将保留第二次以上的粘贴功能。单击 OK 后运行的宏非常简单:它创建一个新工作表,从数据库中插入一些数据,并对它执行一些循环检查,所以我认为任何 VBA 方法都不会清除复制缓冲区. 我能想到的唯一一件事是.Select它在某一时刻使用然后设置一个.PrintArea,但这不应该有任何复制/粘贴效果,因为它不会复制/粘贴选定的数据,因为所有这些都是通过Cells(row, col) = Cells(row, col)语法完成的。此外,当我打开剪贴板窗格时,它不会擦除任何内容;条目保留在那里。

问题

Excel 2007 在执行链接到命令按钮/文本框的宏后吃掉复制缓冲区是否只是一个错误,或者是否有可能导致问题的原因?如果它是一个错误,是否有一种方法可以放回Ctrl + C用户最初输入的字符串?

4

1 回答 1

0

我发现了这个问题。我没有研究宏调用的每一个子,因为它们有很多,其中大部分看起来微不足道。然而,其中一个看似微不足道的有一个Selection.Copy,如果我设置断点,复制缓冲区将被清除并设置为选择。

虽然由于选择过程的复杂性,我无法将此子更改为不使用选择,但我能够在宏末尾附加一个子,该子接收原始宏输入并执行以下操作:

Sub InputToCopyBuffer (someInputVar As String)
    Dim clipboard As MSForms.DataObject
    Set clipboard = New MSForms.DataObject
    clipboard.SetText someInputVar
    clipboard.PutInClipboard
End Sub

代码稍作修改,取自How to copy to clipboard using Access/VBA?

于 2013-05-31T17:48:53.403 回答