如何从剪贴板复制和复制到剪贴板?

时间:2021-05-20 19:41:15

标签: excel vba string clipboard

我有两个代码(在其他用户的帮助下):
#1 使用当前范围制作特定文本字符串并将其放入剪贴板。
#2 从剪贴板复制,删除一些不需要的字符并将修改后的字符串放回剪贴板。

这些代码在公司的一些机器上不起作用。
所有人都检查了 Microsoft Forms 2.0 对象库。
enter image description here

我读过有关使用 HTML 方法的文章,但我不明白。

代码如下:

#1

Sub x_copiar_nome_arquivo()

    Dim DataObj As New MSForms.DataObject
    Dim arquivo As String
    
    On Error GoTo ErrorHandler
    With Selection.Rows(1).EntireRow
        arquivo = .Range("G1").Value & " - " & Format(.Range("E1").Value, "#000000000")
    End With
    With DataObj
        .SetText arquivo
        .PutInClipboard
    End With
    
ErrorHandler:
    Exit Sub
    
End Sub

#2

Sub y_chave_danfe()
    
    Dim DataObj As New MSForms.DataObject
    Dim chave As String
    Dim danfe As String
    
    On Error GoTo ErrorHandler
    DataObj.GetFromClipboard
    chave = DataObj.GetText
    danfe = Replace(Replace(Replace(Replace(Replace(chave, " ", ""), "/", ""), "-", ""), ".", ""), "_", "")
    With DataObj
        .SetText danfe
        .PutInClipboard
    End With
    
ErrorHandler:
    Exit Sub
    
End Sub

2 个答案:

答案 0 :(得分:1)

这是我编写的两个程序,您可以使用它们与剪贴板进行交互。

Function FromClipboard() As String
    'Returns all text currently in the user's clipboard
    Dim CB As Object
    Set CB = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    CB.GetFromClipboard
    FromClipboard = CB.GetText
End Function

Sub IntoClipboard(ByVal Text As Variant)
    'Text is a Variant type for 64-Bit Support, but the content should be a String
    CreateObject("htmlfile").parentWindow.clipboardData.setData "text", Text
End Sub

这是一个如何使用它的例子

Sub test()
    'Before changes
    MsgBox FromClipboard
    
    'changing the text
    IntoClipboard "Testing"
    
    'After changes
    MsgBox FromClipboard
End Sub

该地址 1C3B4210-F441-11CE-B9EA-00AA006B1A69 在 Windows 上有效,但在 Mac 上无效,如果您希望它在 Mac 上有效,您需要为它们找到正确的地址,然后在其中放置一个 If/Else。

答案 1 :(得分:0)

阿方索

您可以尝试将 late binding 用于 MSForms.DataObject

无论是否有适当的参考,此代码都应适用于所有机器。

Sub y_chave_danfe()
Dim DataObj As Object
Dim chave As String
Dim danfe As String

    Set DataObj = CreateObject( _
                 "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    On Error GoTo ErrorHandler
    DataObj.GetFromClipboard
    chave = DataObj.GetText
    danfe = Replace(Replace(Replace(Replace(Replace(chave, " ", ""), "/", ""), "-", ""), ".", ""), "_", "")
    With DataObj
        .SetText danfe
        .PutInClipboard
    End With

ErrorHandler:
    Exit Sub

End Sub