VBA中使用Excel拷贝和粘贴方法是很容易的,并且很多时候为了提升代码运行效率,应尽量避免在代码中使用拷贝和站,而应优先采用直接赋值的方法。
不可否认,有些应用场景中仍然需要将某些内容放置到剪贴版中,这样可以供其他应用程序使用,如果内容已经在单元格中,那么直接使用Range对象的Copy方法就可以,但是如果内容是保存在变量中,是否可以直接放置到剪贴板,而不使用单元格做中转呢?答案是肯定的。
【方法1】使用WshShell对象
Sub PutDataInClipboard()
Dim objShell As Object
Dim strInt As String
strInt = "12345"
Set objShell = CreateObject("WScript.shell")
objShell.Run "cmd /C echo|set/p=" & strInt & "| CLIP", 2
End Sub
【代码解析】
第4行代码为需要放置到剪贴板中的字符串。
第5行代码创建WshShell对象。
第6行代码执行命令,将变量值放置到剪贴中。
在此之后,在任何应用程序中都可以使用粘贴功能(Ctrl+V组合键),将"12345"粘贴到指定位置。
【方法2】使用DataObject对象
Sub SetClipboard(ByVal strInt As String)
Dim objDO As Object
Set objDO = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
With objDO
.settext strInt
.putinclipboard
End With
End Sub
Public Function GetCB() As String
Set objDO = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
With objDO
.GetFromClipboard
GetCB = .GetText
End With
End Function
Sub DEMO()
Call SetClipboard("ABC")
[A1] = GetCB
[A2].PasteSpecial Paste:=xlPasteAll
End Sub
【代码解析】
SetClipboard过程将字符串放置到剪贴板中。
第2行代码创建DataObject对象。
第5和6行代码将变量的值放置到剪贴板中。
GetCB函数用于读取剪贴板中的值。
第12行代码使用GetFromClipboard方法读取剪贴板。
第13行代码设置函数返回值。
DEMO过程为示例。
第17行代码调用SetClipboard过程将ABC放置到剪贴板中。
第18行代码调用GetCB函数,将剪贴板内容写入A1单元格。
第19行代码使用PasteSpecial方法,将剪贴板内容写入A2单元格。
注意:如果在Excel中直接使用Ctrl+V组合键,插入的内容为不可以识别字符,如下图A3所示。