• ベストアンサー

ダブルクリックで貼付け確認のイベントを発生させたい

E1セルをダブルクリックすると、「コピーしたテキストを貼り付けますか?」という 質問のポップがでてきて、”はい”を押すと、勝手に値のみの形式で貼り付けられ 、”いいえ”を押すと何も起こらないようにしたいです。そして、貼り付けるテキスト がない場合は、ダブルクリックをすると逆に、「コピーしたテキストがありません」と いう忠告がでてきて、OKで忠告ポップを終わらせるようにしたいです。どのようなコード を書けばよいかお力をいただければ幸いです(´;ω;`)。。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

ふむ。。。 準備: VBE画面を開き、ツールメニューの参照設定で Microsoft Forms 2.0 Object Library にチェックする シートモジュールに下記をコピー貼り付ける Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean)  Dim d As MSForms.DataObject  Dim res  Set d = New MSForms.DataObject  If Application.Intersect(Target, Range("E1")) Is Nothing Then Exit Sub  cancel = True  d.GetFromClipboard  On Error GoTo errhandle  res = Application.Clean(d.GetText)  If MsgBox("paste?", vbOKCancel) = vbOK Then  Target = res  End If  Exit Sub errhandle:  MsgBox "nothing" End Sub E1でWクリックする。 #補足 たとえばESCキーを押すとかでは、「貼り付けるものが無い」状態を作れないので注意してください

kokorororo
質問者

お礼

ご回答ありがとうございますm(__)m d As MSForms.DataObjectの所が選択されて、コンパイルエラー:ユーザ定義型は定義されていませんというエラーがでてしまいました(´;ω;`) 参照設定でMicrosoft Forms 2.0 Object Libraryにチェックは確かに入っています。 いつも本当に申し訳ないです。。

kokorororo
質問者

補足

度々申し訳ないです;[挿入]-[ユーザーフォーム]-[UserForm]を追加。 [ツール]-[参照設定]-[Microsoft Forms 2.0 Object Library]にチェックがついている事を確認したら、 できました! 自宅のPCなのでよかったです。職場でできるか不安ですが頑張ってみます!! もしできなかったら怖いのでこの質問はあと少しだけ置かせて下さい(´;ω;`) keithinさんありがとうございますm(__)mm(__)m

その他の回答 (4)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>例えばセルに パソコンがあります と書いていた時に、 >がありますだけコピーしたような感じです。そういう時は、上記の失敗が表示される こんな事かな? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean)   Dim CB As Variant, i As Long   Dim myFlg As Boolean   If Target.Address <> "$E$1" Then Exit Sub   cancel = True   CB = Application.ClipboardFormats   For i = 1 To UBound(CB)     If CB(i) = xlClipboardFormatText Then       myFlg = True       Exit For     End If   Next i   If myFlg <> True Then     MsgBox "コピーしたテキストがありません", 48     Exit Sub   End If   If MsgBox("コピーしたテキストを貼り付けますか?", vbYesNo + vbQuestion) = vbYes Then     On Error Resume Next     ActiveSheet.PasteSpecial Format:="テキスト"     If Err Then Selection.PasteSpecial Paste:=xlValues     On Error GoTo 0   End If End Sub

kokorororo
質問者

お礼

何度もご回答ありがとうございますm(_ _)m 希望の趣旨のものになっています! ただ、ただ、申し訳ないです。。(´;ω;`) 例えばセル内でEnterで改行されたものをコピーしていた場合は一つずれて 貼付けられます;あとメモ帳で改行したもののコピーや空白後改行したものを コピーしても失敗するようです;そこまで想定していなかったと思うので申し訳 なかったです。。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>E1セルをダブルクリックすると 訂正してください If Target.Address <> "$E$4" Then Exit Sub ↓ If Target.Address <> "$E$1" Then Exit Sub

kokorororo
質問者

お礼

ご回答ありがとうございます; 実際にやってみますと、貼り付けるものが無いときは、OKで終了できました。ただ、貼付けるものがあるときに、はいをおすと 実行時エラー Range クラスの PasteSpecial メソッドが失敗しました というポップがでます;

kokorororo
質問者

補足

度々申し訳ないです;セルそのものをコピーしてやれば成功しました! しかし質問が十分で申し訳ございません;コピーはテキストを選んでコピーした ものを指します; 例えばセルに パソコンがあります と書いていた時に、 がありますだけコピーしたような感じです。そういう時は、上記の失敗が表示される みたいです;

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

E1セルだけにしか対応していないので、ほかのセルやセル範囲にするには変更する。 操作したいセルのあるSheetのコードモジュールに置く。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True If Target.Address = "$E$1" Then If Application.CutCopyMode Then res = MsgBox("コピーしたテキストを貼り付けますか?", vbOKCancel) If res = vbOK Then Target.PasteSpecial Paste:=xlPasteValues End If Else res = MsgBox("コピーしたテキストがありません", vbOKOnly) End If End If End Sub

kokorororo
質問者

お礼

ごかいとうありがとうございます。何かコピーしていても、常にコピーしたテキストがありませんと表示されます;

kokorororo
質問者

補足

度々失礼します;セル自体をコピーしていれば成功しました!ありがとうございますm(__)m ただ、今回の私の質問が不十分だったため重ねておわび申し上げます; 貼り付けたいものはセルそのものではなくて、例えばセルの中の文字の一部分のみを選択してコピー等をしたテキストを指します。そういうものはテキストとして表示されないのでしょうか?(´;ω;`)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   Dim CB As Variant, i As Long   Dim myFlg As Boolean   If Target.Address <> "$E$4" Then Exit Sub   Cancel = True   CB = Application.ClipboardFormats   For i = 1 To UBound(CB)     If CB(i) = xlClipboardFormatText Then       myFlg = True       Exit For     End If   Next i   If myFlg <> True Then     MsgBox "コピーしたテキストがありません", 48     Exit Sub   End If   If MsgBox("コピーしたテキストを貼り付けますか?", vbYesNo + vbQuestion) = vbYes Then     Selection.PasteSpecial Paste:=xlValues   End If End Sub

kokorororo
質問者

お礼

お早いご回答本当にありがとうございますm(_ _)m If Target.Address <> "$E$4" Then Exit Sub ↓ If Target.Address <> "$E$1" Then Exit Sub 修正してみました。しかし上のお礼のような形になってしまいました(´;ω;`)

関連するQ&A