2016-04-29 7 views
4

私のファイルには、サマリーページの列Aの値に対応するシート名のリストがあります。私は各シートからセルB6の値を取り出し、そのクライアントの対応する行に要約シートに貼り付けます。私は、列Aの値に基づいて名前を付けられたシートからコピーすることによって、列Aの値に基づいてコピーと貼り付けを調べるよう試みましたが、「下付き文字が範囲外です"ワークシート(a)。エラー(" B6 ")のエラー。コピーの問題。以下のコード:Excel VBA-値に基づいてサマリーシートに値をコピーしようとしています

Sub columnfiller() 
Dim i As Integer 

Dim a As String 

a = Worksheets(2).Cells(7 + i, "A").Text 

For i = 3 To Worksheets.Count 
Worksheets(a).Range("B6").Copy 
ActiveSheet.Paste Destination:=Worksheets(2).Cells(7 + i) 
Next i 
End Sub 

7 + iは表の最初のセルへの参照です。

答えて

4

未検査。私はこれがあなたが望むものだと思います。ワークシートをループする代わりに、私はあなたの列をループダウンしました。

Sub columnfiller() 

Dim lastRow As Long 
Dim summaryWs As Worksheet 
Dim ws As String 

Set summaryWs = WorkSheets(2) 

With summaryWs 

    lastRow = .Cells(.Rows.count, "A").End(xlUp).Row 

    For I = 7 To lastRow 'you didn't initiate i so guessing first row is 7 

     ws = .Cells(I, 1) 
     .Cells(I, 2) = WorkSheets(ws).Range("B6") 'not sure if you need formatting. this does not have formatting 

    Next 

End With 

End Sub 
2

aをループ外に定義しているため、i0に設定されています。私はあなたが意図したものではないと推測しています。その場合、7 + iは無意味ですから。私はそれが正しいものに設定されていることを確認するためにDebug.Print aを追加します。

+0

「7 + i」は無意味ではありません。 「i」は増分します。 – findwindow

+1

Seanが正しいです。 '私はOPのコードではインクリメントしません。さて、そうですが、それは 'a'の値を設定した後に起こります。あなたはそこに元のコードでいくつかのものを逆さまに持っています... – vacip

+0

ああ。 'a'は変化するワークシートであるはずです。 – findwindow

関連する問題