excel 如何利用写入VBA 来做到一键执行 「清空剪贴簿」?电脑开太久没有重新开机后,在电脑的剪贴簿里会堆积出很多用不到的资料,如何利用EXCEL写入VBA 来做到一键执行 「清空剪贴簿」?请问这要怎么写呢?

1 个回答

2

尼克

iT邦大师 1 级 ‧ 2024-10-29 09:50:00

在 Excel 的 VBA 中,虽然没有直接的命令来清空剪贴簿,但可以透过创建一个「无」的 `DataObject` 或使用 `Application.CutCopyMode = False` 来达成这个效果。以下是使用 VBA 来清空剪贴簿的一个简单範例:

### 方法一:使用 `Application.CutCopyMode`

这是一种快速、简单的方式来取消剪贴模式,但不会完全清空剪贴簿的内容:

```vba
Sub 清空剪贴簿()
    Application.CutCopyMode = False
End Sub

方法二:使用 DataObject 清空剪贴簿

这种方法会完全清空系统的剪贴簿。需要引用 Microsoft Forms 2.0 Object Library:

  1. 开启 VBA 编辑器(按 Alt + F11)。
  2. 在「工具」>「参考」中勾选 Microsoft Forms 2.0 Object Library
  3. 然后,将以下程式码贴上至模组中:
Sub 清空剪贴簿()
    Dim objData As New MSForms.DataObject
    objData.SetText "" \' 将剪贴簿设为空字串
    objData.PutInClipboard \' 将空字串放入剪贴簿
End Sub

方法三:直接使用 Windows API 清空剪贴簿

这是一个更进阶的方式,透过 Windows API 可以直接清空剪贴簿:

#If VBA7 Then
    Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
    Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
    Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
#Else
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
#End If

Sub 清空剪贴簿()
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
End Sub

使用方式

将以上任一种程式码贴入 VBA 编辑器中,并可在 Excel 里透过快捷键或按钮设置来一键执行此宏,即可清空剪贴簿。

资料来源chatgpt

  • 1

skypara

iT邦新手 4 级 ‧
2024-11-04 07:17:45

以上的方法均无法达到自动清空剪贴簿的功能,目前我只能找到一些手动方式来清除

修改