2011-12-19 22 views
5

私は比較的簡単な問題を解決しようとしていますが、わかりません。私の目的は、メインExcelアプリケーションのワークシート内のセル範囲を、新しく作成した2番目のExcelアプリケーションのワークシート内の別の範囲(同じサイズ)にコピーすることです。VB:範囲を別のExcelアプリケーションにコピー

Set secondExApp = CreateObject("Excel.Application") 

私は後でこの取扱説明書を使っています。これまで私は2つの異なる方法を試みました。どちらも正しく動作しません。

0:製造/はじめ

Set srcWb = Application.ActiveWorkbook 
Set srcSheet = srcWb.Worksheets("example") 

Set dstApp = CreateObject("Excel.Application") 
Set dstWb = dstApp.Workbooks(1) 
Set dstSheet = dstWb.Worksheets(1) 

1:PasteSpecial - (!)画像を配信代わりにちょうど範囲

srcSheet.Range("A1:B2").Copy 
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll 

2 .: Range.Copyメソッド[宛先] - うまくいきません - 同じアプリケーション内のシートに対してのみこのメソッドを使用できますか?

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _ 
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...)) 

ご迷惑をおかけして申し訳ございません。


編集: 私はすでに、「マクロの記録」機能でプレイしましたが、私は、「選択」または細胞/シート/など


を「活性化」することなく、自分自身でそれをコーディング好みます

編集(を解く): はあなたが私のために良い更なる出発点を提供、非常に多くのGSergとiDevlop両方ありがとうございます。私はxlClipboardFormatDspTextとしてExcelの定数までいくつかの研究を行った。

新しいExcelインスタンスを開くと[貼り付け(特殊)]メニューが変更されたという事実は本当に助かりました。

新しいインスタンスを作成する代わりに、単にブック(隠すことができる)を追加し、このオブジェクトを使用してコンテンツを追加するだけです。同じインスタンスに保持されているので(また、タスクマネージャも見てください)、[貼り付け(特殊)]メニューは完全に同じです。

Range.Copy [destination]を選択せず​​に使用することも可能です。

結果

'Hides the new workbook 
Application.ScreenUpdating = False 

Set dstWb = Workbooks.Add 
Set dstSheet = dstWb.Worksheets(1) 

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy 
dstSheet.Paste dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...)) 

'Avoids the often seen dashed border around the copied range 
Application.CutCopyMode = False 

'Setting the initial change back 
Application.ScreenUpdating = True 

ソフトウェア:Excel 2007の

+0

Excelの同じインスタンスで別のブックの代わりに2番目のExcelアプリケーションを使用するのはなぜですか?私が見ることができる唯一のボーナスは、巨大な計算のためにデュアルコアプロセッサを利用することです。しかし、あなたがそれを必要としないなら、それは遅くなります。 –

+0

@iDevlopどのように面白い。私はあなた自身のことを知った後、あなたのコメントを読んだだけです。非常に便利なコメント! – Mic

答えて

4

棒でExcelを突っついによって決定されるように、あなたが間エクセルもののためWorksheet.Pasteを使用する必要があります。

srcSheet.Range("A1:B2").Copy 
dstSheet.Paste dstSheet.Range("A1") 

は、アクティブセルを使用しているため

srcSheet.Range("A1:B2").Copy 
dstSheet.Range("A1").Select 
dstSheet.PasteSpecial xlClipboardFormatDspText, False 

はしかし、これは、最初のdstSheet上のセルを選択する必要がない:xlClipboardFormatDspTextとしてクリップボードから貼り付ける際に厚い棒で

突っついExcelは、数式が保存されますことを明らかにしました。

+0

GSergありがとうございました! **式**が送信されないという事実を除いて、これは問題ありません。数式を含める方法はありますか?なぜPasteSpecialメソッドが機能しないのですか? – Mic

+0

@Micそれは動作しますが、あなたが望むフォーマットではありません。私の編集を参照してください。 – GSerg

+0

@Mic Ok、別の編集。仕事をしているようだ。 – GSerg

関連する問題