2017-08-04 5 views
1

ここでの目的は、ワークシートオブジェクトを設定し、そのワークシートを新しいブックに移動し、そのワークシートオブジェクトを引き続き使用することです。ただし、そのワークシートを移動すると、それ以前に関連付けられたワークシート・オブジェクトが失われているように見えます。テストへExcel VBA:ワークシートオブジェクトの関連付けを維持しながらシートを新しいブックに移動

は、私たちがシート1という名前のその中の1枚で、各Book1.xlsbとBook2.xlsbという名前の同じフォルダ内の2つのExcelブックを持っているとしましょう。 Book1を開くと、下のサブフォームに入り、シートを別のワークシートオブジェクトを使って移動しようとします。

すべてが「動作」しますが、ワークシートオブジェクトはプロセスで失われ、再度使用しようとするとエラーがスローされます。 ワークシートを新しいブックに移動し、後で参照できるようにワークシートオブジェクトの関連付けを失うことはありませんか?

Option Explicit 
Sub test() 
    Dim wb1 As Workbook 
    Dim wb2 As Workbook 

    Dim ws As Worksheet 

    Set wb1 = ThisWorkbook 
    Set wb2 = Workbooks.Open("Book2.xlsb") 

    Set ws = wb2.Sheets(1) 

    ws.Name = "Sheet2" 'name changed to avoid conflict with the one already there 
    ws.Move wb1.Sheets(1) 

    MsgBox ws.Name 'this line throws an error, indicating that ws association has been lost 

End Sub 

編集: これが不可能な場合は、どのように我々は確実に我々だけで移動したものと、そのワークシートオブジェクトを再設定することができますか?

+0

いいえ、新しいワークブックにある場合は、再作成する必要があります。ただし、シートの名前を知っていて、WorkBookオブジェクト参照があるので、簡単です。 – braX

答えて

0

ws.Move wb1.Sheets(1) 

をあなたがalreay Book2.xlsbの最初のシートにシートWSを移動ファイル

「シート(1)」はファイルの最初のシートを意味します

このようにwsをリセットすることができます。

Set ws = wb1.Sheets(1) 
1

WSオブジェクトをリセットするには、次の

Set ws = wb1.WorkSheets("Sheet2") 

をあなたが名前を知らない場合、あなたは知っている、それは右、最後の位置に移動したのか?

Set ws = wb1.WorkSheets(wb1.WorkSheets.Count) 

それは、その後、最初の位置に移動された場合は、次のコードで

Set ws = wb1.WorkSheets(1) 
+0

これは、持ち込まれたシートの名前が常に同じものである場合にのみ機能します。場合によっては、競合を避けるためにシートの名前を変更していない場合、Excelは自動的に名前を変更して、わからない新しい名前にします。 – Ethan

+0

サンプルコードでは、明示的に名前を付けています。私はあなたに別のオプションを与えます。 – braX

+0

あなたの編集に応じて、最後に追加されたかのように表示されません。あなたのものが異なる動作を示した場合は、Excelの別バージョンを使用している可能性があります。私はOffice Professional 2016 – Ethan

関連する問題