2017-12-16 4 views
-1

シートを同じExcelワークブックにコピーすると、エラー・サブスクリプトが範囲外になります。同じExcelブックにシートをコピーすると、範囲外のエラーが発生する

sub copyWorkSheet() 
    Dim myPath As String 
    myPath = Application.ActiveWorkbook.FullName 

    Workbooks("Generator.xlsm").Activate 

    Sheets("Details 1").Select 
    Sheets("Details 1").Copy After:=Workbooks(myPath).Sheets("Details 2") 
End Sub 
+0

どの行がエラーをスローしますか?あなたが 'Sheets(" Details 1 ")'や 'Sheets(" Details 2 ")'を持っていないと思います。 – jsotola

+0

詳細1は存在しますが、詳細2は私が新しいファイルを作成すると仮定していません。詳細2 – harry

+0

'Workbooks(myPath)'は間違いなくエラーを出すでしょう - 'Workbooks'コレクションのインデックスにはパスが含まれていないはずですので、' myPath = Application.ActiveWorkbook.Name' – YowE3K

答えて

2

エラーが発生することができる行数があります。

ワークブック( "Generator.xlsm")は、 "Generator.xlsm" であることを確認し

を有効にしますopen - activateはGeneratorをアクティブな利用可能なブックにしますが、ではなく、が開きます。

また、両方のワークブックに「詳細1」と「詳細2」が存在することを確認する必要があります。そうでない場合は、エラーも発生します。

例は、コードを修正:あなたは「はThisWorkbookにコピーする。このスニペットは

  • を前提としてい

    Sub copyWorkSheet() 
        Set otherWorkbook = Application.Workbooks.Open("Generator.xlsm") 
        otherWorkbook.Activate 
        otherWorkbook.Sheets("Details 1").Select 
        otherWorkbook.Sheets("Details 1").Copy After:=Application.ThisWorkbook.Sheets("Details 2") 
    End Sub 
    

    - 詳細1を」

  • どちらのワークブックが含まれているVBAに関連したワークブック "を" と"詳細2"
  • "Generator.xlsm"は、このコードの実行後も開いたままです。
+0

詳細2シートが作成されていない、コピー中に新しいシートを作成すると仮定していましたか?私は7行目でエラーになります。 – harry

+0

ようこそスタックオーバーフロー。これはよく書かれた答え、素敵な仕事のように見えます。 – Airhead

+0

@harry、コードは「詳細1」をスポット*にコピーします*詳細2 – TheSmizen

0

あなたの問題は、この行によって引き起こされる:オブジェクトの名前を返します

myPath = Application.ActiveWorkbook.FullName 

はあなたがその使用できるワークブックコレクション内の項目に対処するために、ディスク

へのパスを含みますパスを含まないNameプロパティ。上記の行を変更する:

myPath = Application.ActiveWorkbook.Name 

解決するあなたの問題は、あなたはそれがワークブックではないかもしれないので、ActiveWorkbookを利用するのは避けるべきディテールと述べ2.

という名前のシートが含まれていないActiveWorkbookを提供していますあなたはそれがそうだと思います。 Subが保存されているワークブックにコピーしたい場合は、ThisWorkbook.Nameを参照する方が安全です。

関連する問題