none
Copyメソッドによるクリップボードの使用について RRS feed

  • 質問

  • はじめまして。

    Range.Copyメソッドのクリップボード使用について質問があります。

     

    現在、Visual Basic 2005から「Microsoft.Office.Interop.Excel」のRange.Copyメソッドを使用してExcelのコピーを行っています。Excelは2003を使用しており、OSはWindows Server 2003です。

    MSDNでは「Destinationを省略するとクリップボードにコピーします。」という説明がありますが、プログラム上で「Destination」を指定してもクリップボードにコピーされてしまいます。

    そこで以下の質問があります。

    1.「Destination」を指定してもRange.Copyメソッドでは必ずクリップボードを使用するものなのでしょうか?

    2.クリップボードを使用しないように回避する方法はあるのでしょうか?

    3.mlMappedRange.Copyメソッドもあるようなのですが、こちらを使えばクリップボードを使用しないようになるのでしょうか?(MSDNの説明では、Range.Copyメソッドと同じことを書いていました。)

     

    実際のコーディングは以下の通りです。

    -----------------------------------------------

            Dim intProcess As Integer                                   'プロセス
            Dim objFromRange As Microsoft.Office.Interop.Excel.Range    'コピー元範囲
            Dim objToRange As Microsoft.Office.Interop.Excel.Range      'コピー先範囲

            Try
                'コピー元範囲指定
                objFromRange = CType(CType(mobjBook.Worksheets.Item(strFromSheet), _
                                    Microsoft.Office.Interop.Excel.Worksheet).Range(strFromRange), _
                                    Microsoft.Office.Interop.Excel.Range)
                'コピー先範囲指定
                objToRange = CType(CType(mobjBook.Worksheets.Item(strToSheet), _
                                    Microsoft.Office.Interop.Excel.Worksheet).Range(strToRange), _
                                    Microsoft.Office.Interop.Excel.Range)

                'コピー
                Try
                    objFromRange.Copy(objToRange)
                Catch
                    '「エクセルのレンジコピーに失敗しました。」
                    Throw New ProjectExceptionClass(ConstantClass.ERRMSG.C_CKAE_029)
                End Try

                System.Threading.Thread.Sleep(200)
    ----------------------------------------------------

    どなたかご存知の方がいましたら、よろしくお願い致します。

     

    2011年8月3日 4:27

回答


  • 1.「Destination」を指定してもRange.Copyメソッドでは必ずクリップボードを使用するものなのでしょうか?

    2.クリップボードを使用しないように回避する方法はあるのでしょうか?

    自分も先日気付いたのですがどうもクリップボードを経由して動作しているようですね。

    クリップボードを使わないで似たような方法を取るには、コピー元の書式値を一つずつコピー先に写してから値を写すしかないようです。

    • 回答としてマーク 山本春海 2011年8月18日 7:55
    2011年8月3日 6:19
  • ClipBoardに影響を与えずにCopyするのは無理そうですね^^;
    マクロなどで、値と書式をコピーするプログラムを書くほかには、あとは、シート丸ごとコピーする場合はClipboardを使わないようです。

    同じような議論をされているスレッドがあったのでご参考になれば。

    「C# ExcelのRangeオブジェクトを使ったコピーについて - Insider .NET会議室」
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/15564?page=1

    • 回答としてマーク 山本春海 2011年8月18日 7:55
    2011年8月3日 6:24

すべての返信


  • 1.「Destination」を指定してもRange.Copyメソッドでは必ずクリップボードを使用するものなのでしょうか?

    2.クリップボードを使用しないように回避する方法はあるのでしょうか?

    自分も先日気付いたのですがどうもクリップボードを経由して動作しているようですね。

    クリップボードを使わないで似たような方法を取るには、コピー元の書式値を一つずつコピー先に写してから値を写すしかないようです。

    • 回答としてマーク 山本春海 2011年8月18日 7:55
    2011年8月3日 6:19
  • ClipBoardに影響を与えずにCopyするのは無理そうですね^^;
    マクロなどで、値と書式をコピーするプログラムを書くほかには、あとは、シート丸ごとコピーする場合はClipboardを使わないようです。

    同じような議論をされているスレッドがあったのでご参考になれば。

    「C# ExcelのRangeオブジェクトを使ったコピーについて - Insider .NET会議室」
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/15564?page=1

    • 回答としてマーク 山本春海 2011年8月18日 7:55
    2011年8月3日 6:24
  • galaco様

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

    MSDNでも明確に「クリップボードを使用せずにコピーします。」とは記載していなかったので、クリップボードを経由してしまうのではと思ったのですが、やはりクリップボードを経由してしまうのですか。

    参考になりました。

     


    2011年8月3日 6:50
  • ClipBoardに影響を与えずにCopyするのは無理そうですね^^;
    マクロなどで、値と書式をコピーするプログラムを書くほかには、あとは、シート丸ごとコピーする場合はClipboardを使わないようです。

    同じような議論をされているスレッドがあったのでご参考になれば。

    「C# ExcelのRangeオブジェクトを使ったコピーについて - Insider .NET会議室」
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/15564?page=1

    Chuki様

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

    上記情報を見てみます。


    2011年8月3日 6:57