问题
我正在处理的数据视图表想要重置视图部分的内容(为空白)。从历史上看,我们遇到的问题是用户说这张表清除了他们的系统剪贴板。
使用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
答案 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
到单元格值,它们之间几乎没有区别。