[[20180801140818]] 『コピーした情報を貼りつけるマクロ』(COCO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コピーした情報を貼りつけるマクロ』(COCO)

エクセル等からコピーした情報を、
右クリックして貼付け またはCTL+Vで貼付けしなくても
マクロ(VBA)を設定し フォームボタンを押すだけで
値で貼付けになるようにしたいのですが
どのような記述をすればよいでしょうか。

貼り付けたい場所は
シート名「検索」、セルはC4です。

また、コピーしている情報がない場合は以下のメッセージを出したいです

 MsgBox "コピー情報がありません。", vbExclamation

宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


エラーを出そうと思うとクリップボードの内容を調べる必要があるので
・一旦ダミーのセルに貼り付けて内容を読み取る方法
・DataObjectを使う方法
が考えられますが、DataObjectを使う方法を紹介します。

'メニュー>ツール>参照設定:Microsoft Forms 2.0 Object Library

'クリップボードの文字列を取得
Public Function GetClipboardText() As String

    Dim CB As New DataObject
    CB.GetFromClipboard
    On Error Resume Next    '失敗時はエラー無視。""を返す
    GetClipboardText = CB.GetText
    On Error GoTo 0
End Function

Sub a()

    If GetClipboardText() = "" Then
         MsgBox "コピー情報がありません。", vbExclamation
    Else
        Worksheets("検索").Range("C4").Value = GetClipboardText()
    End If
End Sub
(名無し) 2018/08/01(水) 14:33

ありがとうございます
メニュー>ツール>参照設定:Microsoft Forms 2.0 Object Library
設定しました

その後
Public Function GetClipboardText() As String  以下貼付けさせていただきましたが

End subが必要です と表示されます
(COCO) 2018/08/01(水) 14:43


横からですけど、どの程度VBAわかりますか?

>End subが必要です と表示されます
となったとのことですが、対処方法はすぐにピンときてますか?
(というか、エラーメッセージをみて、あ〜そっかそうだよね。って言えますか?)

上記は上記として別途確認。

「エクセル等からコピーした情報」とのことですが、Excel以外もありますか?
貼付け先が特定されていて、コピー元も特定されているのであればですけど、どうせならボタン押したらコピー元にデータが入っていればコピーする。みたいにしたほうが良くないですか?
(もこな2) 2018/08/01(水) 15:04


>どの程度VBAわかりますか?

初心者です
なぜそういうエラーがでるのかピンときていません

エクセル以外からコピーする事もあります(コピー元の指定はないです)
貼付けさきは 検索シートのC4セル ということは決まっています

(COCO) 2018/08/01(水) 15:08


>End subが必要です と表示されます
ということは、文字通り、最後の行のEnd Subまでコピペ出来ていないということです。

私の書いたコードの
'メニュー>ツール>参照設定:Microsoft Forms 2.0 Object Library
から
End Sub
まで全てをコピーして貼って下さい。

※今後使い回す時にこまるので、参照設定が必要である文もコメントに残すことをおすすめします。
('から始まる文がコメントです)

改めて御確認下さい。
(名無し) 2018/08/01(水) 15:28


↓ここから貼り付けしますと

'メニュー>ツール>参照設定:Microsoft Forms 2.0 Object Library

'クリップボードの文字列を取得
Public Function GetClipboardText() As String

    Dim CB As New DataObject
    CB.GetFromClipboard
    On Error Resume Next    '失敗時はエラー無視。""を返す
    GetClipboardText = CB.GetText
    On Error GoTo 0
End Function


自動的に↑ここで区切り線が入ります(それは大きな問題ではないのかもしれませんが)

'クリップボードの文字列を取得 のところで
コンパイルエラー
End Subが必要です と出ます。

(COCO) 2018/08/01(水) 15:32


もしかして、モジュール内に他にもマクロが書かれてはいませんか?
直前のプロシャージャがEnd Subされていないのではないかと思います。

とりあえず指示された上の行にEnd Subは書いてみましたか?

(名無し) 2018/08/01(水) 16:08


今このようになっています。

Sub 貼付け()

'メニュー>ツール>参照設定:Microsoft Forms 2.0 Object Library

'クリップボードの文字列を取得
Public Function GetClipboardText() As String

    Dim CB As New DataObject
    CB.GetFromClipboard
    On Error Resume Next    '失敗時はエラー無視。""を返す
    GetClipboardText = CB.GetText
    On Error GoTo 0
End Function

Sub a()

    If GetClipboardText() = "" Then
         MsgBox "コピー情報がありません。", vbExclamation
    Else
        Worksheets("検索").Range("C4").Value = GetClipboardText()
    End If

'
End Sub
(COCO) 2018/08/01(水) 16:46


まさに1行目の
>Sub 貼付け()
が犯人です。

既存のものは消していただき、私のマクロのSub a()をSub 貼付け() にすると良いかと思います。
(名無し) 2018/08/01(水) 16:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.