トップ回答者
Excelでセル内の分をコピーしてSkypeに張り付ける

質問
-
まったくVBAの知識がありません。
以下不明点ですが、どなたかご存知の方教えていただけると幸いです。
=====
Excelのセル内に記載されている文字をコピーするマクロを作成しました。
具体的にはセルA1に文字が入力されており、マクロ用のボタンを設置して、ボタンをクリックするとコピーまでされているといったマクロです。ボタンをクリック(コピーのマクロを実施)した後にメモ帳やWordなどにはペースト(Ctrl+V)がうまくいきますが、
Skypeにだけ貼り付けができません。※Skype以外のアプリケーションは問題なくペーストできます。エラーメッセージは「× 貼り付け中にエラーが発生しました」です。
Excelの文字をCtrl+Cでコピーする分には問題なくペーストが可能なのですが・・・
Skypeの仕様でマクロでコピーした文はペーストできないのでしょうか。。。
もし仕様でできないようであれば、「Excelでコピーした文をSkypeにペーストする」というマクロを作成するといいのかとも考えましたが
知識がなくまったく作成できません。
どなたか教えていただけますでしょうか。===========
現在作成しているコピーするマクロ
Sub CellCPY(Row_No As Integer)
Dim Data As New DataObject
Dim txt As String
Dim Col_No As IntegerCol_No = 1
txt = Cells(Row_No, Col_No).Value
cbData.SetText txt
cbData.PutInClipboard
End Sub
ーーーSub CellSele_5()
Dim Row_No As Integer
Row_No = 10
Call CellCPY(Row_No)
End Sub
回答
-
STEEVEN30さん、こんにちは。
あなたのマクロは、「Dim Data As New DataObject」を「Dim cbData As New DataObject」に変更すれば、問題なく動作することを確認しました。
そこで、コピー対象のワークシートに、ホーム>クリップボード(三角印) でクリップボードの情報を表示して、1)あなたのマクロでセルをコピーすること、及び、2)Ctrl+Cでセルをコピーをすること、を試行してみました。
すると、クリップボードの内容として表示されるマークに違いが見られました。ここら辺が原因かもしれません。しかし、小生の見当違いかもしれません。ご参考までに情報提供します。
申し訳ないのですが、残念ながら、小生はSkypeはやらないので、Skypeの動作についてまでは確認することができません。
ちなみに、CellCPYを次のようにcbDataを使わないで単純にセルをCopyするようにしますと、Ctrl+Cでコピーした場合と同じマークが表示されましたので、これならうまく貼り付けができるかもしれません。
Sub CellCPY(Row_No As Integer)
Dim Col_No As Integer
Col_No = 1
Cells(Row_No, Col_No).Copy
End Sub小生の試行は、Windows7Professional + Excel 2013 です。
- 編集済み KokemomoYamamomo 2019年5月23日 2:52
- 回答としてマーク STEEVEN30 2019年5月23日 6:54
- 回答としてマークされていない STEEVEN30 2019年5月23日 6:54
- 回答としてマーク STEEVEN30 2019年5月23日 6:56
すべての返信
-
STEEVEN30さん、こんにちは。
あなたのマクロは、「Dim Data As New DataObject」を「Dim cbData As New DataObject」に変更すれば、問題なく動作することを確認しました。
そこで、コピー対象のワークシートに、ホーム>クリップボード(三角印) でクリップボードの情報を表示して、1)あなたのマクロでセルをコピーすること、及び、2)Ctrl+Cでセルをコピーをすること、を試行してみました。
すると、クリップボードの内容として表示されるマークに違いが見られました。ここら辺が原因かもしれません。しかし、小生の見当違いかもしれません。ご参考までに情報提供します。
申し訳ないのですが、残念ながら、小生はSkypeはやらないので、Skypeの動作についてまでは確認することができません。
ちなみに、CellCPYを次のようにcbDataを使わないで単純にセルをCopyするようにしますと、Ctrl+Cでコピーした場合と同じマークが表示されましたので、これならうまく貼り付けができるかもしれません。
Sub CellCPY(Row_No As Integer)
Dim Col_No As Integer
Col_No = 1
Cells(Row_No, Col_No).Copy
End Sub小生の試行は、Windows7Professional + Excel 2013 です。
- 編集済み KokemomoYamamomo 2019年5月23日 2:52
- 回答としてマーク STEEVEN30 2019年5月23日 6:54
- 回答としてマークされていない STEEVEN30 2019年5月23日 6:54
- 回答としてマーク STEEVEN30 2019年5月23日 6:56
-
具体的にはセルA1に文字が入力されており、マクロ用のボタンを設置して、ボタンをクリックするとコピーまでされているといったマクロです。
コードを見る限りでは、A1 ではなく A10 を見ているようですね。
A10 の中身はどうなっていますか?※Skype以外のアプリケーションは問題なくペーストできます。
クリップボードの内容を列挙できるソフトウェアを用いて、データの内容を確認してみてください。
MSForms.DataObject オブジェクトの SetText & PutInClipboard メソッドを使っているので、正しく渡されていれば、クリップボードにはテキストデータが下記の 3 種類のフォーマットで転送されていると思います。
1: CF_TEXT
13: CF_UNICODETEXT
7: CF_OEMTEXT(Excel から直接コピーした場合は、上記のほか、画像形式やスプレッドシート形式などといったより多くの情報が含まれます)
Skype に貼り付けた場合、CF_TEXT よりも CF_UNICODETEXT 形式が優先的に使用されるはずですが、その時のテキストデータのコードページが何になっているか(UTF-16LE とか UTF-8 とか)を確認してみた方が良いかもしれません。
-
Dim Data As New DataObject
質問に対する回答ではないですが、VBA では Dim で宣言時にオブジェクトやクラスなどを
New するのは非推奨です。- VBA オブジェクト変数の宣言時にNewすると何がまずいのか - t-hom’s diary
- VBAでクラス変数の宣言とNewを1行で書いてよいか - Excel作業をVBAで効率化
-
「NEW」は非推奨なのですね。
恥ずかしながら初耳でした。。
勘違いされている可能性があるので補足です。
あくまで Dim 宣言時に同時に New してしまうのがいけないだけで
New そのものがダメなわけじゃありません。' これはよくない Dim Data As New DataObject ' これは大丈夫 Dim Data As DataObject Set Data = New DataObject ' これも大丈夫 Dim Data As Object Set Data = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' これも大丈夫 With New DataObject End With