使用Excel 2016并引用Microsoft Forms 2.0对象库,我尝试将ActiveCell的内容复制到剪贴板,但剪贴板的结果内容是以下2个符号(如果它们确实显示在此文本字段中的话)。
��
(In在StackOverflow网站的文本编辑器中,这些符号看起来就像白色矩形。根据我粘贴它的文本编辑器,它们也像一个问号,一个包含白色问号的黑色菱形,以及一个空格,就像按下了空格键一样。)
我不想复制任何类型的符号,它是简单的英语。我已经在其他宏中使用了类似的代码,直到今天它仍然有效。代码本身如下。我希望你能帮助!
Dim clipboard As New MSForms.DataObject
clipboard.SetText ActiveCell.Value
clipboard.PutInClipboard
Debug.Print clipboard.GetText(1)
Set clipboard = Nothing
Debug.Print
命令打印出所需的文本,但宏完成后,所需的文本不存在,而是再次出现2个符号。
4条答案
按热度按时间jogvjijk1#
在Windows 10中,如果文件资源管理器打开,则putincliboard不起作用。
https://www.mrexcel.com/board/threads/copy-cell-address-to-clipboard-issue-putinclipboard-not-working.983442/
mfpqipee2#
对我有效的一个方法是
hmae6n7t3#
我尝试了另一种方法...
我发现,如果我把剪贴板粘贴到记事本++,然后把同样的文本复制回剪贴板,然后继续使用宏,vba然后继续罚款。
因此,考虑到上述操作,我只是在vba代码中做了同样的事情。
创建第二个数据对象创建文本对象从第一个对象的剪贴板复制文本,将该文本放入第二个对象,然后将第二个对象放入剪贴板。
如下所示(cb是第一个对象,cb2是新的空对象,cbtext是从第一个对象复制文本的字符串)
whlutmcx4#
效果似乎取决于版本,无论资源管理器窗口是在Excel之前还是之后打开。它还取决于资源管理器窗口中的内容-如果是“系统位置”,如“这台PC”,那么putincliboard仍然工作正常。
我已经尝试了很多年的各种选择,但最终找到了一个变通办法-就像手动复制一样。
在这种情况下,要复制到剪贴板的文本位于活动单元格中,但该方法可适用于其他情况:
F2激活单元格的内容,^a选择整个内容,^c将内容复制到剪贴板;则需要{ESC},否则单元格内容将保持活动状态。
如果所需文本不是活动单元内容,例如在变量MyTextToCopy中,则可以临时覆盖活动单元:
这些行激活活动工作簿中的activecell(因此可以在从窗体调用的过程中使用,等等),选择内容,覆盖内容,复制新内容,然后返回原始内容。
或者,可以使用记事本;以下例程将在Excel以外的程序中工作:
其中'ClipText'是您要保存的文本,例如在例程中,行Clip(“1234”)将把“1234”放到剪贴板上