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、Windows のクリップボードとは異なる MSO クリップボードをクリアすることです。これは.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 変数に開始値が割り当てられていないことを示します。空の変数は、数値コンテキストでは 0、文字列コンテキストでは長さ 0 の文字列 ("") として表されます。

どうやら、セル値が に設定されているEmpty場合、テストしたときにセルが 0 に設定されなかったため、想定した文字列値と見なされます。彼ら。EmptyvbNullString

于 2012-12-21T16:36:53.860 に答える