getFromClipboard函数是否适用于mac?

时间:2017-08-15 20:02:38

标签: excel vba excel-vba excel-vba-mac

寻找是或否。

如果答案是否定的,那么就寻找一些想法在Mac上做同样的事情。

要注意 - 我在谷歌上看到的最后一篇文章涉及Office 2004,我在2016年,因为我希望为以下代码构建此代码的mac用户:)

这是有问题的代码。

Set objClipboard = New MSForms.DataObject
objClipboard.GetFromClipboard

On Error Resume Next 'Turns Error checking off
vClipArray = Split(objClipboard.GetText(1), vbCrLf)

If Err.Number <> 0 Then         'Script will error if there is no copy, etc..
    MsgBox "Bad Copy, Sorry"
    End
End If
On Error GoTo HandleErrors 'Turns Error Checking on

1 个答案:

答案 0 :(得分:1)

是。但是这个函数有一个奇怪的问题,讨论here。简单地说,它设置剪贴板文本,但通常会添加一些随机尾随字符。例如,剪贴板值“hey”会给你“heyT&lt;”。其中一位用户向MS报告了该问题。

非常有趣。我玩了几个代码变体。可以获得CONSISTENT随机字符。但 一致的随机字符对我们更有用......我添加了一个循环,请参阅下面的代码。它重复1000次错误命令并保存最短结果版本的字符串。

出于调试目的,如果你按原样运行,第一个MsgBox会给你初始结果(可能成功也可能不成功 - 注意它通常有垃圾字符),第二个MsgBox显示最短的文本,应该是正确的。

也许我们可以运行一些分析来确定一个比1000更合理的数字。

另一种方法是比较字符串并找出字符开始不同的点。

Sub GetClipBoardText2()
    Dim clipboard As MSForms.DataObject
    Dim str1 As String

    On Error Resume Next

    Set clipboard = New MSForms.DataObject

    clipboard.GetFromClipboard
    str1 = clipboard.GetText

    MsgBox str1, vbOKOnly, "FIRST RESULT"

    'Determine shortest result of 1000 attempts:
    strLenMin = 0
    For i = 0 To 1000
        str1 = clipboard.GetText
        strLen = Len(str1)
        If strLenMin = 0 Then 'nothing stored yet
            strBest = str1
            strLenMin = strLen
        Else 'compare length to that of the shortest stored string
            If strLen < strLenMin Then 'it's smaller, store it
                strBest = str1
                strLenMin = strLen
            End If
        End If
    Next i

    MsgBox strBest, vkOKOnly, "SHORTEST RESULT"

    If Err.Number <> 0 Then
         MsgBox "Bad Copy, Sorry"
    End If

    On Error GoTo 0
End Sub