2017-10-04 2 views
0

私はanother postから編集した次のコードを使用して、開始日と終了日の間のすべての日付を表示しています。リストは、開始日と終了日を含むセルとは別のシートに作成されています。私がsheet6を開いていればコードは動作しますが、sheet1にいる場合は動作しません。私は '実行時エラー9:範囲外の添え字'を取得します。デバッグは、sheet6への参照を強調表示します。アクティブなシートに関係なく、このコードを修正するにはどうすればよいですか?別のシートにリストを作成する - ランタイムエラー9

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Sheet1.Range("CZ").Value 
LastDate = Sheet1.Range("DA").Value 

NextDate = FirstDate 
Worksheets("sheet6").Range("A1").Select 
Do Until NextDate > LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 
    NextDate = NextDate + 1 

Loop 

End Sub 
+0

"Worksheets(" sheet6 ")。範囲(" A1 ")ではありません。 –

+3

非効率で通常は不要なため、選択は使用しないでください。ここで問題になるのは、最初にシートをアクティブにしてからセルを選択する必要があることです。アクティブではないシート上のセルは選択できません。 – SJR

+1

ああ、それは役に立ちます。私はそれを調べます。ご返信ありがとうございます。 @SJR – Kim

答えて

1

基本的に、常にワークシートと範囲変数を設定して完全修飾してください。それからSelect/Activateを使うのではなく、直接作業してください。

Sub GenerateDates() 

    Dim wb As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim rDest As Range 
    Dim FirstDate As Date 
    Dim LastDate As Date 
    Dim NextDate As Date 

    Set wb = ActiveWorkbook 
    Set wsData = wb.Sheets(1) 
    Set wsDest = wb.Sheets(6) 
    Set rDest = wsDest.Range("A1") 

    FirstDate = wsData.Range("CZ").Value 
    LastDate = wsData.Range("DA").Value 
    NextDate = FirstDate 

    Do Until NextDate > LastDate 
     rDest.Value = NextDate 
     Set rDest = rDest.Offset(1) 
     NextDate = NextDate + 1 
    Loop 

End Sub 
+0

これは完璧に機能しました!ありがとうございました。私はあなたのコードを見て、実際にそれを理解するので、私は将来それを複製することができます。私は本当にあなたの助けに感謝します。 – Kim

関連する問題