为什么VBA copytoClipboard不再起作用?

时间:2019-10-01 14:42:31

标签: excel xml vba

我一直使用这个小makro for excel,直到它突然停止工作(我不需要更改任何东西,除了可能是Office更新)为止:

Sub SumToClipboard()
  If TypeName(Selection) <> "Range" Then Exit Sub
  ToClipBoard (WorksheetFunction.Sum(Selection))
End Sub


Public Function ToClipBoard(s)
    Dim DataObj As New MSForms.DataObject
    DataObj.SetText s
    DataObj.PutInClipboard
End Function

它仍然会将某些内容复制到剪贴板,但它不是像以前那样所选单元格的总和,而是一些无法识别的内容。你们知道我是否需要更改某些设置,或者更新是否使此处的任何代码无用?对于此刻的任何输入感到高兴。

2 个答案:

答案 0 :(得分:2)

尝试明确说明要使用的对象和数据类型。另外,还有17 should return a value。考虑:

Function

在这里工作正常。我怀疑其中涉及的一个单元格可能包含一个Public Sub SumSelectionToClipboard() If Not TypeOf Selection Is Excel.Range Then Exit Sub Dim total As Variant total = WorksheetFunction.Sum(Selection) If IsNumeric(total) Then ToClipBoard CDbl(total) End Sub Private Sub ToClipBoard(ByVal value As Double) With New MSForms.DataObject .SetText CStr(value) .PutInClipboard End With End Sub 值(例如Variant/Error#REF!等)。如果结果不是有效的数值,则上面的代码不会将总和发送到剪贴板。

还请注意,与#VALUE!相比,TypeName是一个相当弱的“字符串类型”类型检查。

答案 1 :(得分:1)

@Mathieu提供了一个很好的答案。但是我只是想借此机会添加过去使用的功能。

由于可以设置和获取剪贴板中的值,因此它几乎像某种形式的属性,而不是函数,可以很容易地将其制成属性,但我更喜欢该函数,因为它模仿了内置函数我在类似的编程语言WinWrapBasic(WWB)中使用的功能-与VBA几乎完全相同,但没有所有工作簿,工作表和文档对象。

Public Function Clipboard(Optional str As Variant) As Variant

    With New MSForms.DataObject
        If IsMissing(str) Then
            .GetFromClipboard
            Clipboard = .GetText
        Else
            .SetText CStr(str)
            .PutInClipboard
        End If
    End With

End Function

您可以为剪贴板设置一个值:

Clipboard "MyValue"

或者您可以从剪贴板中检索值:

MsgBox Clipboard