2

问题

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

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

问题)

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

我不愿意通过大型代码库并搜索/替换这种行为,如果它稍后会变成我必须回去修复它,因为我已经引入了一些错误。

编辑:我应该提到我正在使用 Excel 2007

4

2 回答 2

2

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

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
于 2012-12-21T11:05:56.657 回答
1

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

我会推荐以下任何一种:

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 变量分配起始值。空变量在数字上下文中表示为 0,在字符串上下文中表示为零长度字符串 ("")。

显然,当单元格值设置为 时Empty,它被认为是我认为的字符串值,因为当我测试它时,它没有将单元格设置为 0。因此,当将EmptyvbNullString应用于单元格值时,两者之间几乎没有区别他们。

于 2012-12-21T16:36:53.860 回答