2017-06-01 11 views
-1

シート名の配列があります。私は、別のファイルからデータをコピーして、それぞれのワークシートにデータを貼り付けたいと思います。しかし、それはシートを見つけることはありません。それは、この段階でエラーが作成されます。ここではVBA Excelでワークシートを検索して有効にする

worksheets.(sheets(i)).Activate 

は私のコードです:。

Sub NewWorkshet() 
    Dim criteria(40) As Integer 
    Dim i As Integer  
    Dim MyFile As String 

    MyFile = Application.GetOpenFilename() 

    criteria(0) = 335 
    criteria(1) = 336  
    criteria(2) = 337   
    criteria(3) = 338 
    criteria(4) = 339   
    criteria(5) = 351   
    criteria(6) = 392   
    criteria(7) = 393 

    Dim sheets As Variant   
    sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

    For i = 0 To 7   
     ' Remove Filter 
     Windows("firstbook.xlsx").Activate 
     ActiveSheet.Range("$A$1:$S$6274").AutoFilter Field:=17 
     Workbooks.Open (MyFile) 
     Worksheets("first").Select 
     ActiveSheet.Range("$A$1:$O$3339").AutoFilter Field:=2, Criteria1:=criteria(i) 

     Range("A2").Select 
     Range(Selection, Selection.End(xlToRight)).Select 
     Range(Selection, Selection.End(xlDown)).Select 
     Selection.Copy 

     Windows("firstbook").Activate 
     Worksheets("sheets(i)").Select 
     Range("B2").Select 
     Selection.End(xlDown).Select 
     Selection.Offset(1, -1).Select 
     ActiveSheet.Paste 

     Workbooks(MyFile).Close SaveChanges:=False 
    Next i 
End Sub 
+0

ナイルズご理解ください。シート名が「a335」、「a336」などの「firstbook」というブックがあり、ブックの範囲をコピーしたいのですか?別のワークブックと同じ名前のシートを作成しますか? – micstr

答えて

0

その治療のワークシート( "シート(I)")の単語シート(I)として文字通り選択します変数ではありません。だから変わらず、あなたのシートを見つけることができません。

このための文字列を作成する必要があります。

MySheet = "sheets(" & i & ")" 

続いてMySheetを参照することができ、あなたが望むように変更します:

は、ループ内でこれを使用し、その後Dim MySheet As String

を追加してみます。

+0

このMySheet = "sheets("&i& ")"の後に提案したように、ワークシート(MySheet).Selectを使用しましたが、動作しません。このステップでエラーが表示されます - ワークシート(MySheet).Select –

+0

あなたは正しいブックにいますか?これは問題を引き起こす可能性があります。新しいブックをアクティブにする必要がありますか?私はThisWorbook.sheetsを使用する傾向があります( – micstr

+0

ThisWorkbook.sheets(シート(i))を使用するとエラーが表示されます。 –

0

問題が

Worksheets("sheets(i)").Select 

は、テキスト/名称として "シート(I)" と呼ばれるワークシートを探しているということです。
あなたの代わりに

Worksheets(sheets(i)).Select 

を使用する場合、それはあなたの問題は、あなたがテキストとしてあなたの「シート」の値を設定していないということである変数/配列sheets(i)

+0

thanks for VBA guide!:D – KoderM16

+0

@Peh を選択してもエラーが表示されます –

+0

@を使用してコードプレゼンテーションを行いますが、私はこのワークシート(シート(i) NILESHSUTHAR **エラーが表示されない場合(エラーメッセージ)、誰も助けてくれません。配列 'sheets'は' sheets = Array( "a335"、 "a336"、 "a337"、 "a338"、 "a339"、 "a351"、 "a392"、 "a393" )」を選択し、現在選択されているワークブックにこれらのシート名が存在することを確認する(または正しいワークシートを選択する)必要があります。しかし、コードを改善するためのガイドを最初に使用することをお勧めします。これにより、実行可能な多くの問題が軽減されます。基本が悪いコードの場合は、詳細を修正するのは難しいです。 –

0

の値のように呼ばれるworkhseetを探しています。

sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

コードは次のように参照そして

Dim sheets(0 To 7) As Variant 
sheets(0) = "a335" 
sheets(1) = "a336" 
sheets(2) = "a337" 
sheets(3) = "a338" 
sheets(4) = "a339" 
sheets(5) = "a351" 
sheets(6) = "a392" 
sheets(7) = "a393" 

を読んでください。

Worksheets(sheets(i)).Select 
+0

提案したとおりに使用した後で、配列の要素をどのように参照する必要がありますか?私はこれをやっています--- MySheet = "sheets("&i& ")" ワークシート(MySheet).Selectしかしこれもエラーを示しています。 MySheetを印刷するとシート(0)が表示されますが、a335が表示されます。これを解決するには –

+0

これは奇妙です私は自分のコードをもう一度テストして、今は動作しません。しかし、以下のコードは、配列を埋めるために一貫して機能します。変形例として シート(0)= "A335" シート(1)= "A336" シート(2)= "A337" シート(3)= "A338" シート(0~7) 薄暗いシート(3)= "a393" シート(5)= "a351" シート(6)= "a392" シート(7)= "a393" 次に、 ワークシート(シート(i))。選択 – TomW

+0

はい。それは動作しません。 MySheetは「MySheet = sheets(i)」を使用すると「a335」を参照しますが、ワークシート(MySheet)にエラーが表示されます。選択...これをどのように解決する必要がありますか? –

関連する問題