【发布时间】:2013-05-28 07:34:39
【问题描述】:
在 MS Excel 2010 中,我尝试使用 SendKeys 将一些文本复制到剪贴板。但是,它不起作用。
这是 Microsoft 为防止人们创建欺诈性宏而采取的某种安全措施吗?这是一些代码,显示了我正在尝试做的事情(假设您在 vba 窗口中并选择了一些文本):
Public Sub CopyToClipboardAndPrint()
Call SendKeys("^(C)", True)
Dim Clip As MSForms.DataObject
Set Clip = New MSForms.DataObject
Clip.GetFromClipboard
Debug.Print Clip.GetText
End Sub
请注意,要使用 MSForms.DataObject,您必须引用 %windir%\system32\FM20.DLL(即 Microsoft Forms 2.0 对象库)。
编辑: 我要复制的文本是 not 在文档窗口中,而是在 vba 项目窗口的即时窗口中!所以 Selection.Copy 在这里不起作用。
【问题讨论】:
-
打不通
Clip.SetText("Some Text", 1)和Clip.PutInClipboard有什么原因吗? -
在运行时之前我不知道
"Some Text"是什么。我真的需要获取已在焦点窗口中选择的文本。 -
你试过
SendKeys "^g^c"吗? -
我确实选择了带有
"^g"的即时窗口,是的。在单独的 SendKeys 中,我尝试过"^c"、"^C"、"^(c)"、"^(C)"。 -
这可能有点跑题了,但是...如果您立即有一些数据,我想您是从任何其他子例程那里编写的。你不能用任何公共变量而不是读取即时窗口来捕捉这些数据吗?你确定你已经探索了所有可能的方法......
标签: vba excel excel-2010