寻找是或否。
如果答案是否定的,那么就寻找一些想法在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
答案 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