回答 受付中

Excel VBA クリップボードの処理方法

  • すぐに回答を!
  • 質問No.9596874
  • 閲覧数56
  • ありがとう数3
  • 気になる数2
  • 回答数3

お礼率 100% (4/4)

お世話になります。
以下の処理について教えて下さい。
1つ目のブックを開いて
Workbooks.Worksheets(1).Shapes(1).Copy
でクリップボードにコピーして、
UserFormのImage1に
Set Image1.Picture = CreatePictureFromClipboard()で貼り付け、
2つ目のブックを開いて
Workbooks.Worksheets(1).Shapes(1).Copy
でクリップボードにコピーして、
UserFormのImage2に
Set Image2.Picture = CreatePictureFromClipboard()で貼り付け、
3つ目のブックを開いて
Workbooks.Worksheets(1).Shapes(1).Copy
でクリップボードにコピーして、
UserFormのImage3に
Set Image3.Picture = CreatePictureFromClipboard()で貼り付ける処理をしています。

この一連の流れを実行すると、image3だけ画像が貼られてます。
また、image1だけを生かして処理すると、image1に貼り付けられます。
image2だけ、image3だけでも同様で、2つのimageを処理するとダメでした。
全部のimageに貼り付けることは可能なのでしょうか?
また、無理であれば違う方法で可能でしょうか?
よろしくご指導お願いします。

回答 (全3件)

  • 回答No.3

ベストアンサー率 59% (174/291)

他カテゴリのカテゴリマスター
https://soudan1.biglobe.ne.jp/qa2885043.html
にある
CreatePictureFromClipboard
を使っていますか?

ならば、

Private Sub CommandButton1_Click()
 Dim MyWB As Workbook
 Dim cbData As New DataObject
 
 Set MyWB = Workbooks.Open(ThisWorkbook.Path & "\BookA.xlsx")
 MyWB.Worksheets(1).Shapes(1).Copy
 Set Image1.Picture = CreatePictureFromClipboard()
 MyWB.Close False
 
 'DoEvents
 
 Set MyWB = Workbooks.Open(ThisWorkbook.Path & "\BookB.xlsx")
 MyWB.Worksheets(1).Shapes(1).Copy
 Set Image2.Picture = CreatePictureFromClipboard()
 MyWB.Close False

 'DoEvents
 
 Set MyWB = Workbooks.Open(ThisWorkbook.Path & "\BookC.xlsx")
 MyWB.Worksheets(1).Shapes(1).Copy
 Set Image3.Picture = CreatePictureFromClipboard()
 MyWB.Close False

End Sub

といったコードで再現します。

先の説明と重複しますが
 'DoEvents
これを有効にすれば解決できるようです。
お礼コメント
katsu4429

お礼率 100% (4/4)

コメント有難うございます。
具体的なコードも提示して頂き、有難うございました。
提示して頂いたコードで上手くいっているならば、
私のコードがどこか間違っているのでしょうね。
DoEvents含め、もう少し確認してみます。
有難うございました。
投稿日時 - 2019-03-18 11:15:01
  • 回答No.2

ベストアンサー率 65% (13/20)

具体的な環境などにもよると思いますが、個別でやればいけるなら、その原因の切り分けからですね。
ブックを開く、閉じるの動作が入る場合、その処理時間の間にマクロ側が次の処理を開始してしまう場合がよくあります。

一度ステップインなりブレークポイントなりstopなりで、時間をかけてやった場合はどうなるか確認してはいかがでしょうか。
お礼コメント
katsu4429

お礼率 100% (4/4)

コメント有難うございます。
仰るとおり、もう少しデバッグをしっかりとしてみます。
投稿日時 - 2019-03-18 11:10:05
  • 回答No.1

ベストアンサー率 59% (174/291)

他カテゴリのカテゴリマスター
CreatePictureFromClipboard
これがよくわかりませんが...

>2つ目のブックを開いて
この直前に
DoEvents
を実行することで解決できるかもしれません。
お礼コメント
katsu4429

お礼率 100% (4/4)

コメント有難うございます。
DoEventsを入れてたんですが上手くいかなかったのでした。
もしかしたら処理を入れる箇所が違ったかもしれないので
再度確認してみます。
投稿日時 - 2019-03-18 11:08:48
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ