[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『pasteを実行するには』(yama)
マクロ記録で得られたデータを参考に下部のように
作成して見たのですが★部分の文を御教授ください。
宜しくお願いします。
他のアプリケーションから貼り付けのみを実行
Sub Macro1()
'
Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _ False Range("A1").Select End Sub
以下のようにif文で作成したい
Sub 貼り付け()
IF ★ then
Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _ False Else MsgBox "貼付け対象がありません。コピーしてからやり直してください。", vbExclamation End If
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(γ) 2017/03/22(水) 02:33
'現在のコピーモードを出力する Select Case Application.CutCopyMode Case Is = False Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False Case Is = XlCutCopyMode.xlCopy MsgBox ("コピーモード") Case Is = XlCutCopyMode.xlCut MsgBox ("切り取りモード") End Select (yama) 2017/03/22(水) 02:56
そうですね。 これでも、問題なく実行されますけど、
・Case 文、Case Is と記述しなくとも、ふつうに、さらっと書くことができます。 ・また、定数ですけど、もちろん 定数クラス名.定数名 でもいいのですが、単純に定数名だけでOKです。 ・MsgBox の引数指定、結果オーライですが、実は( ) で囲むのは【間違った記述】です。
Sub Sample() Select Case Application.CutCopyMode Case False Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False Case xlCopy MsgBox "コピーモード" Case xlCut MsgBox "切り取りモード" End Select End Sub
(β) 2017/03/22(水) 05:12
Application.CutCopyMode = False かつ CB = Application.ClipboardFormats If CB(1) <> True Then などと判定するんでしょうか。 http://officetanaka.net/excel/vba/tips/tips20.htm を参照ください。
そのほかAPIを使う手もあるかもしれません。
(γ) 2017/03/22(水) 05:45
おはようございます。
他アプリからの貼付けなら、γさんの言われている通り ClipboardFormats で確認したら良いですが、 中身がテキストなら、0の時だけになると思います。(他にもあったらすいません) CutCopyMode がコピーかカットモードでも0になるので以下のように判断して下さい。
If Application.ClipboardFormats(1) = 0 And Application.CutCopyMode = False Then
γさん
True以外にすると画像とかも対象になってしまいますね。
yamaさん βさん
ご提示のコードではクリップボードが空でモードがFALSEの時はエラーになりますよ。
(sy) 2017/03/22(水) 07:34
γさん
すいません。 True以外だから0のみOKになるんでした。 失礼しました。
(sy) 2017/03/22(水) 07:48
> ご提示のコードではクリップボードが空でモードがFALSEの時はエラーになりますよ。
そうですね。γさんも指摘しておられるように クリップボードの中身の確認は 必須ですね。
ロジックというより、コード記述方式についてコメントしたつもりでした。
(β) 2017/03/22(水) 08:16
Sub harituke()
Dim CB As Variant Application.CutCopyMode = False CB = Application.ClipboardFormats If CB(1) <> True Then Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False Else MsgBox "貼付け対象がありません。コピーしてからやり直してください。", vbExclamation End If '切り取りモードまたはコピーモードを解除 Application.CutCopyMode = True End Sub (yama) 2017/03/22(水) 12:01
>コピーモードが解除されていないようです。
解除は最初のほうにある Application.CutCopyMode = False で行っているわけですが マクロ終了直前の Application.CutCopyMode = True これは、何をしようとして記述してあるのですか?
( β) 2017/03/22(水) 12:55
'切り取りモードまたはコピーモードを解除 Application.CutCopyMode = True やはり違いますか? クリップボードを空の状態にしたかったのですが・・・ よろしくお願いします。
(yama) 2017/03/22(水) 13:08
>ネット検索でコピーモードの解除と出ていたので書いてみたのですが・・・
どこに書いてあったのでしょうね? たとえば MSDN内の
https://msdn.microsoft.com/ja-jp/library/office/ff839532(v=office.15).aspx
ここには、
設定値 内容 False 切り取りモードまたはコピー モードを解除し、点滅している枠線を取り除きます。 True 切り取りモードまたはコピー モードを開始し、点滅している枠線を表示します。
と書いてあります。
ところで、
>コピーモードが解除されていないようです。
なぜ、そう判断されたのですか? コピー元の領域の枠線が残っているということですか?
( β) 2017/03/22(水) 13:24
もしや、officeクリップボードの中身を消したいということでは。 左側に出るクリップボードの中身を消したいということだったりしますか? (2Win) 2017/03/22(水) 13:37
( β)さん
ありがとうございます。
わたしが勘違いしているみたいです。
(yama) 2017/03/22(水) 14:55
VBAでコード一文では無理っぽいです。 下記で操作するコードが記載されています。
http://www.ka-net.org/office/of56.html
無理ではないけど手間が掛かってますね。
(2Win) 2017/03/22(水) 15:34
要件を誤解しているかもしれませんが
http://www7b.biglobe.ne.jp/~whitetiger/ex/ex2002092.html
API利用はかわりませんが、↑に、もう少しシンプルなコード例が紹介されています。
(β) 2017/03/22(水) 17:47
こんなのでも行けるんじゃないかと、
Range("A1").Copy Application.CutCopyMode = False
(sy) 2017/03/22(水) 19:45
To syさん
これだと【別アプリ】でクリップボードに格納されたものが、そのまま クリップボードに表示されますね。
(β) 2017/03/22(水) 20:34
(γ) 2017/03/22(水) 20:43
以下のようにしましたが自信が無い状態です。
再判定よろしくお願いします。。
Sub 貼付()
Dim CB As Variant Application.CutCopyMode = False CB = Application.ClipboardFormats If CB(1) <> True Then Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False Else MsgBox "貼付け対象がありません。コピーしてからやり直してください。", vbExclamation End If '切り取りモードまたはコピーモードを解除 Application.CutCopyMode = False 'クリップボードを空に! Call ClearClipboard End Sub (yama) 2017/03/22(水) 20:55
βさん
>これだと【別アプリ】でクリップボードに格納されたものが、そのまま クリップボードに表示されますね。 ? (β) 2017/03/22(水) 17:47 のAPIと同じように右クリックでの貼付けは出来なくなりますよ。
それともクリップボードの「すべてクリア」と同じ事がしたいと言う事だったのかな?
でしたら(2Win) 2017/03/22(水) 15:34 で紹介されているのAPIの Sample02 を実行する事になりますけど、 こんな中身のクリアなんて、何の為にするんでしょうかね?
普通はクリップボードの中身なんて気にする人はいないと思うけど、残ってたら悪戯する人でもいてるのかな?
(sy) 2017/03/22(水) 20:57
(γ) 2017/03/22(水) 21:06
To syさん
>こんな中身のクリアなんて、何の為にするんでしょうかね?
ですよね。質問者さんから答えていただくテーマですね。 想像ですけど、2Winさんからの問いかけ、
> もしや、officeクリップボードの中身を消したいということでは。 >左側に出るクリップボードの中身を消したいということだったりしますか?
に対して【そうです】というレスでしたので、なにかしら、そういうことがしたいんだろうなと 思っています。
で、これも、なぜかはわかりませんが、
>他のアプリケーションから貼り付けのみを実行
とありますね。 他のアプリというのが何かはわかりませんが、IE や メモ帳 といったものだとして、 マクロ実行後も、ホームタブのクリップボード表示を行うと、そこに貼り付けたものが残っている。 それを消したいということなのかなと思っています。(想像)
(β) 2017/03/22(水) 22:14
>こんな中身のクリアなんて、何の為にするんでしょうかね? 確かにあまり必要ではない気がします。 お騒がせしました。勉強になりました。
(yama) 2017/03/23(木) 00:59
Sub 貼付() Dim CB As Variant Dim ccm As Variant
ccm = Application.CutCopyMode CB = Application.ClipboardFormats
If ccm = False Then If CB(1) <> True Then Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", link:=False, DisplayAsIcon:=False
'クリップボードを空に! Call ClearClipboard2
Else MsgBox "貼付け対象がありません。コピーしてからやり直してください。", vbExclamation Exit Sub End If
End If
End Sub
Sub ClearClipboard2() ' Thanks To Abyssさん
Const NAVDIR_FIRSTCHILD = 7& Dim acc As IAccessible Dim bar As Office.CommandBar
Set bar = Application.CommandBars("Office Clipboard") If Not bar.Visible Then bar.Visible = True
Set acc = bar.accChild(1&) _ .accNavigate(NAVDIR_FIRSTCHILD) _ .accNavigate(NAVDIR_FIRSTCHILD) _ .accNavigate(NAVDIR_FIRSTCHILD)
''''acc.accDoDefaultAction 1& ' すべて貼り付け acc.accDoDefaultAction 2& ' すべてクリア
End Sub
回答者からのお尋ねにはしっかり返事するようにしてください。
(γ) 2017/03/23(木) 06:22
私の発言から皆さんを混乱させてしまったようで、申し訳ございません。
yamaさん 混乱させてしまうようなことを書いてしまって申し訳ございませんでした。 で、γさんからの問いかけですが、If〜thenの記述は納得できる記述になってますか?
以下、必要ないかもですが言い訳です。 (yama) 2017/03/22(水) 12:01 ここでのコードで、Application.CutCopyMode = Falseが書いてあるのにクリップボードが消えないとおっしゃっていたので、 Excelの画面であと見るとこといったらオフィスクリップボードかなー?と勝手に解釈しての発言でした。 ちょっと軽率でした。今後は気をつけます。
(2Win) 2017/03/23(木) 09:18
(γ) 2017/03/24(金) 07:34
γさん そう言っていただけるとありがたいです。 迷惑だなんてとんでもありません。
ご返信くださってありがとうございました。 (2Win) 2017/03/24(金) 11:53
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.