http://www.pptjcw.com

wordpress教程菜鸟教程:如何清空 Office 的剪切板

    关于清空Office剪切板的方法问题,网络上一直也有不少的说,总结下来一般有以下几种。

    如何清空 Office 的剪切板



    1、认为使用 Application.CutCopyMode = False 就可以了。其实不然,这只是取消剪切或复制模式并清除移动边框。并没有真正的清除剪切板上的数据。数据还是存在的。
    2、使用API函数程序,代码如下:

    Private Declare Function apiOpenClipboard Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
    Private Declare Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
    Private Declare Function apiCloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
    Sub myClr()
    apiOpenClipboard (0)'打开剪切板
    apiEmptyClipboard'清空剪切板
    apiCloseClipboard'关闭剪切板
    End Sub

    但是你会发现使用这段程序也不会清空Office的剪切板,这是因为Windows不会参与剪切板私有数据的管理。
    3、前一段时间我看到一段代码,是用来清空Office的剪切板的,代码如下:

    '---------------------------------------------------------------------------------------
    ' Module : Module1
    ' Purpose : Clear Windows and Office Clipboards
    '---------------------------------------------------------------------------------------
    Private Declare Function apiOpenClipboard Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
    Private Declare Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
    Private Declare Function apiCloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    Private Declare Function FindWindowEx Lib "user32.dll" _
    Alias "FindWindowExA" (ByVal hWnd1 As Long, _
    ByVal hWnd2 As Long, ByVal lpsz1 As String, _
    ByVal lpsz2 As String) As Long
    Private Declare Function PostMessage Lib "user32.dll" Alias _
    "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_LBUTTONDOWN As Long = &H201&
    Private Const WM_LBUTTONUP As Long = &H202&

    ' Creates a long variable out of two words
    Private Function MakeLong(ByVal nLoWord As Integer, ByVal nHiWord As Integer) As Long
    MakeLong = nHiWord * 65536 + nLoWord
    End Function

    Sub ClearOfficeClipboard()
    Dim hMain&, hExcel2&, hClip&, hWindow&, hParent&
    Dim lParameter&, sTask$
    sTask = Application.CommandBars("Task Pane").NameLocal
    ' Handle for XLMAIN
    hMain = Application.hwnd
    ' Find the OfficeClipboard Window
    ' 2 methods as we're not sure if it's visible
    ' ONCE it has been made visible the windowclass is created
    ' and remains loaded for the duration of the instance
    Do
    hExcel2 = FindWindowEx(hMain, hExcel2, "EXCEL2", vbNullString)
    hParent = hExcel2: hWindow = 0
    hWindow = FindWindowEx(hParent, hWindow, "MsoCommandBar", sTask)
    If hWindow Then
    hParent = hWindow: hWindow = 0
    hWindow = FindWindowEx(hParent, hWindow, "MsoWorkPane", vbNullString)
    If hWindow Then
    hParent = hWindow: hWindow = 0
    hClip = FindWindowEx(hParent, hWindow, "bosa_sdm_XL9", vbNullString)
    If hClip > 0 Then
    Exit Do
    End If
    End If
    End If
    Loop While hExcel2 > 0
    If hClip = 0 Then
    hParent = hMain: hWindow = 0
    hWindow = FindWindowEx(hParent, hWindow, "MsoWorkPane", vbNullString)
    If hWindow Then
    hParent = hWindow: hWindow = 0
    hClip = FindWindowEx(hParent, hWindow, "bosa_sdm_XL9", vbNullString)
    End If
    End If
    If hClip = 0 Then
    ClipWindowForce
    hParent = hMain: hWindow = 0
    hWindow = FindWindowEx(hParent, hWindow, "MsoWorkPane", vbNullString)
    If hWindow Then
    hParent = hWindow: hWindow = 0
    hClip = FindWindowEx(hParent, hWindow, "bosa_sdm_XL9", vbNullString)
    End If
    End If
    If hClip = 0 Then
    MsgBox "Cant find Clipboard window"
    Exit Sub
    End If
    lParameter = MakeLong(120, 18)
    Call PostMessage(hClip, WM_LBUTTONDOWN, 0&, lParameter)
    Call PostMessage(hClip, WM_LBUTTONUP, 0&, lParameter)
    Sleep 100
    DoEvents
    End Sub

    Sub ClipWindowForce()
    Dim octl
    With Application.CommandBars("Task Pane")
    If Not .Visible Then
    Application.ScreenUpdating = False
    Set octl = Application.CommandBars(1).FindControl(ID:=809, recursive:=True)
    If Not octl Is Nothing Then octl.Execute
    .Visible = False
    Application.ScreenUpdating = True
    End If
    End With
    End Sub

    提示:如果您觉得本文不错,请点击分享给您的好友!谢谢

    上一篇:word文档转成ppt教程:如何设置 Office 2010 “最近的位置” 和 “最近使用的工作簿” 列表的显示数目 下一篇:word文档排版教程:office 2016自定义安装以及修改安装位置图解教程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。