Range.ClearContents清除系统剪贴板 – 解决方法? (VBA / Excel)中
问题
我正在处理的数据视图表需要重置视图的部分内容(为空白)。 从历史上看,我们遇到了问题,用户说这张表会清除他们的系统剪贴板。
看起来像使用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
错了吗?
我讨厌通过一个庞大的代码库,并search/取代这种行为,如果它将要结束,我必须回去修复它,因为我已经引入了一些错误。
编辑:我应该提到,我正在使用Excel 2007
更新:我刚刚尝试了下面的代码,在这里find,在一个香草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
我唯一注意到的是.ClearContents
清除MSO剪贴板,这不同于Windows的剪贴板。 这是因为.ClearContents
出于某种原因将CutCopyMode
设置为False
。
我会build议这些:
Sub test() Cells(1, 1).EntireRow.Value = vbNullString End Sub Sub test3() Cells(1, 1).EntireRow.Value = Empty End Sub
尽pipe我更喜欢brettdj的方法,只是因为它更干净( Rows(1).Value = vbNullstring
)。
另外,从帮助文件:
空
指示没有将开始值分配给Variantvariables。 一个Emptyvariables在数值上下文中表示为0,或者在string上下文中表示为零长度string(“”)。
显然,当一个单元格的值设置为Empty
,它被认为是我想要的string值,因为当我testing它时,它没有将单元格设置为0.因此,将Empty
或vbNullString
应用于单元格值时,他们没有区别。