剪貼簿功能,是Windows內建的功能之一,而VBA可透過DataObject來進行存取,以下利用幾個程式來介紹要如何撰寫。
例如我的工作表裡面的內容如下圖:
工作表我已框選A1:B4的範圍,並複製起來
此時,執行以下程式:
Sub Day22_取得剪貼簿內容()
Dim data As New DataObject
Dim strData As String
data.GetFromClipboard
strData = data.GetText(1)
Debug.Print strData
End Sub
此程式收集了剪貼簿的內容後,貼到即時運算視窗內,在該視窗將會呈現:
第二個程式,資料如同第一個程式,但為收集A2:A4範圍內的資料,然後寫入剪貼簿中,再用PasteSpecial方法貼到除存格中。
Sub Day22_寫入剪貼簿()
Dim data As New DataObject
Dim strData As String
For Each Rng In Range("A2:B4")
strData = strData & Rng
Next
data.SetText strData '寫入DataObject
data.PutInClipboard '寫入剪貼簿
'同Range("D1").PasteSpecial xlPasteAll
[D1].PasteSpecial xlPasteAll
End Sub
這裡要提到的是,[D1]這樣的寫法,看起來更簡單,寫起來也方便,但我不是很推薦,若你寫的程式需要再多國語言狀態下使用,有些語系的似乎是不支援,但如果都在同樣語系下使用,就沒什麼差別。
以下為呈現出來的結果:
以下是透過SetText方法塞入空值,達到清除剪貼簿的目的。
Sub Day22_清除剪貼簿內容()
Dim data As New DataObject
Set data = New DataObject
data.SetText ""
data.PutInClipboard
End Sub
若你有大量資料需要重別處複製過來,但須加工後才能使用,那可以試著用這方法,將剪貼簿內容取出後,透過程式處理完,再貼到特定位置,達到更有效率的目的,以上分享,希望對各位有所助益。
注意,這部份需要引用Microsoft Forms 2.0 Object Library (FM20.DLL)
補充,可以用以下方法來處理,省略預先引用:
' https://bytecomb.com/copy-and-paste-in-vba/
' Copy and Paste in VBA
Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
Public Sub ClipboardCopy(ByVal Expression As String)
With CreateObject(DATAOBJECT_BINDING)
.SetText Expression
.PutInClipboard
End With
End Sub
Public Function ClipboardPaste() As String
With CreateObject(DATAOBJECT_BINDING)
.GetFromClipboard
ClipboardPaste = .GetText
End With
End Function
菩薩慈悲:參考且作筆記。感恩慈悲分享。感恩感恩 讚歎讚歎 南無阿彌陀佛:
〈Copy, GetFromClipboard, GetText methods, DataObject object example〉