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.因此,将EmptyvbNullString应用于单元格值时,他们没有区别。