Range.ClearContents清除系统剪贴板 - 解决方法? (VBA / Excel)中

时间:2012-12-21 10:53:38

标签: excel vba clipboard

问题

我正在处理的数据视图表想要重置视图部分的内容(为空白)。从历史上看,我们遇到的问题是用户说这张表清除了他们的系统剪贴板。

使用Range.ClearContents清除这些值似乎存在问题。

# Grab some data from cells onto the clipboard

Sub ClearTheClipboardWhenTheUserIsntExpectingIt()
    Cells(1, 1).EntireRow.ClearContents    ' Or something like that
End Sub

这应该足以复制问题。

解决方法

我的问题是关于可能的解决方法,即:

Dim r as Range
...
r.Value2 = Empty

问题(S)

  • 是否有一些明显的理由说明为什么是一个合理的解决方法?
  • 是否有一些规范方法可以在不清除剪贴板的情况下清除一组单元格的内容?
  • 我刚刚使用ClearContents错了吗?

我讨厌通过大型代码库并搜索/替换此行为,如果稍后我必须返回修复它,因为我已经介绍了一些错误。

编辑:我应该提一下,我正在使用Excel 2007

2 个答案:

答案 0 :(得分:2)

更新:我刚刚在香草Excel电子表格中尝试了以下代码,找到了here并成功:

Sub Button1_Click()

Dim clipboardText As String
clipboardText = GetTextFromClipboard()

Cells(1, 1).EntireRow.ClearContents

CopyTextToClipboard (clipboardText)

End Sub

Sub CopyTextToClipboard(ByVal inText As String)

Dim objClipboard As Object
Set objClipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objClipboard.SetText inText
objClipboard.PutInClipboard
Set objClipboard = Nothing

End Sub


Function GetTextFromClipboard() As String

Dim objClipboard As Object
Set objClipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objClipboard.GetFromClipboard
GetTextFromClipboard = objClipboard.GetText
Set objClipboard = Nothing

End Function

答案 1 :(得分:1)

我唯一注意到的是它.ClearContents清除了MSO剪贴板,这与Windows的剪贴板不同。这是因为.ClearContents由于某种原因将CutCopyMode设置为False

我会推荐以下任何一种:

Sub test()
    Cells(1, 1).EntireRow.Value = vbNullString
End Sub

Sub test3()
    Cells(1, 1).EntireRow.Value = Empty
End Sub

虽然我更喜欢brettdj的方法,因为它更干净(Rows(1).Value = vbNullstring)。

另外,从帮助文件:

  

清除

     

表示没有为Variant分配起始值   变量。 Empty变量在数字上下文中表示为0   或字符串上下文中的零长度字符串(“”)。

显然当单元格值设置为Empty时,它被认为是我想要的字符串值,因为当我测试它时,它没有将单元格设置为0.因此,在应用Empty时或vbNullString到单元格值,它们之间几乎没有区别。