プロが教えるわが家の防犯対策術!

シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。
どうしてでしょうか?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Interior.ColorIndex = 6
End Sub

A 回答 (3件)

現象だけ説明すれば、


セルを編集した瞬間に、Excel のコピーモードが解除されてしまうからです。
手動で作業しても同じ現象が起きますよ。

1. セル A1 に適当なものを入力してコピー。
(A1 の枠線が点滅)
2. セル C1 を選択
3. セル C1 の背景色を変える。(または C1 に何かを入力)
(ここで A1 の枠線点滅が解除されてしまう)

「セルのコピー」は特殊なのでこうなります。
セルのコピーじゃなくてセルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。
    • good
    • 1
この回答へのお礼

早速ありがとうございます。
セルを編集するとコピーモードが解除されてしまうのですね、知りませんでした。

> セルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。

「値」をクリップボードにコピーするにはどうすればよいのですか?

お礼日時:2006/04/29 13:48

こんにちは。


以下のようにすれば、質問に有るようなマクロを設定したシート上でもコピー&ペーストが可能になると思います。
ただし、=SUM(A1:A10)などの数式も値で貼り付いてしまいますが・・・

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myData As New DataObject
Dim myTxt As String
'クリップボードが空の時のエラー回避
On Error Resume Next
'クリップボードの文字列を変数に退避
myData.GetFromClipboard
myTxt = myData.GetText

Target.Interior.ColorIndex = 6

'変数に退避した文字列をクリップボードに戻す。
myData.SetText myTxt
myData.PutInClipboard
End Sub

UserFormを挿入するか、
Microsoft Forms 2.0 Object Libraryに参照設定して試してみてください。
    • good
    • 2
この回答へのお礼

ありがとうございます。
いろんなやりかたがありますね。勉強になります。

お礼日時:2006/05/01 10:42

CutCopyMode 中は動作しないようにするとか、、、



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Application.CutCopyMode = 0 Then
   Target.Interior.ColorIndex = 6
 End If
End Sub
    • good
    • 0
この回答へのお礼

なるほど、こういう回避方法があるんですね、ありがとうございました。

お礼日時:2006/04/29 14:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A