iT邦幫忙

DAY 22
3

Excel VBA 的眉眉角角系列 第 22

Excel VBA 的眉眉角角Day22: 如何存取剪貼簿?

  • 分享至 

  • xImage
  •  

剪貼簿功能,是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

若你有大量資料需要重別處複製過來,但須加工後才能使用,那可以試著用這方法,將剪貼簿內容取出後,透過程式處理完,再貼到特定位置,達到更有效率的目的,以上分享,希望對各位有所助益。


上一篇
Excel VBA 的眉眉角角Day21: 執行外部程式
下一篇
Excel VBA 的眉眉角角Day23:使用AutoHotKey自動跳過開啟巨集警告,以及偵測是否為AutoHotKey開啟Excel檔
系列文
Excel VBA 的眉眉角角30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Andy Chiu
iT邦研究生 3 級 ‧ 2018-03-05 02:03:51

注意,這部份需要引用Microsoft Forms 2.0 Object Library (FM20.DLL)

Andy Chiu iT邦研究生 3 級 ‧ 2019-11-07 06:51:21 檢舉

補充,可以用以下方法來處理,省略預先引用:

' 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

我要留言

立即登入留言