- ベストアンサー
エクセルVBA/イベント発生でコピペ不能はなぜ?
シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。 どうしてでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 6 End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
現象だけ説明すれば、 セルを編集した瞬間に、Excel のコピーモードが解除されてしまうからです。 手動で作業しても同じ現象が起きますよ。 1. セル A1 に適当なものを入力してコピー。 (A1 の枠線が点滅) 2. セル C1 を選択 3. セル C1 の背景色を変える。(または C1 に何かを入力) (ここで A1 の枠線点滅が解除されてしまう) 「セルのコピー」は特殊なのでこうなります。 セルのコピーじゃなくてセルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。
その他の回答 (2)
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 以下のようにすれば、質問に有るようなマクロを設定したシート上でもコピー&ペーストが可能になると思います。 ただし、=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に参照設定して試してみてください。
お礼
ありがとうございます。 いろんなやりかたがありますね。勉強になります。
- papayuka
- ベストアンサー率45% (1388/3066)
CutCopyMode 中は動作しないようにするとか、、、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.CutCopyMode = 0 Then Target.Interior.ColorIndex = 6 End If End Sub
お礼
なるほど、こういう回避方法があるんですね、ありがとうございました。
お礼
早速ありがとうございます。 セルを編集するとコピーモードが解除されてしまうのですね、知りませんでした。 > セルの中に入力されている「値」がクリップボードにコピーされていれば貼り付けは可能です。 「値」をクリップボードにコピーするにはどうすればよいのですか?