none
Excelでセル内の分をコピーしてSkypeに張り付ける RRS feed

  • 質問

  • まったく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 Integer

    Col_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

    2019年5月22日 8:37

回答

  • 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
    2019年5月23日 2:25

すべての返信

  • 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
    2019年5月23日 2:25
  • 具体的にはセル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 とか)を確認してみた方が良いかもしれません。

    2019年5月23日 3:05
  • Dim Data As New DataObject

    質問に対する回答ではないですが、VBA では Dim で宣言時にオブジェクトやクラスなどを
    New するのは非推奨です。

    2019年5月23日 4:47
  • 回答ありがとうございます!
    (こちらの利用は初めてでまだ利用方法が分かっておらず、回答としてマークを何回も押してしまいました。。)

    こちらで確認したところ、
    KokemomoYamamomoさんのおっしゃる通り、
    クリップボードの表記が異なっていました。
    また、ご記載いただいたコードで無事Skypeにコピーすることができました。
    本当に感謝いたします。

    ありがとうございました!

    2019年5月23日 7:00
  • 魔界の仮面弁士様、回答ありがとうございます!
    いただいた情報は私が全く知らなかった情報で
    とても勉強になりました。

    また、皆様の回答をもとに無事解決することができました。
    ありがとうございます。
    今後ともよろしくお願いいたします!

    2019年5月23日 7:14
  • infade様、回答ありがとうございます。
    「NEW」は非推奨なのですね。
    恥ずかしながら初耳でした。。

    また、皆さんからいただいたコメントにより解決することができました。
    ありがとうございます!

    2019年5月23日 7:22
  • 「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
    

    2019年5月23日 8:34