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