2017-10-19 8 views
1

1つのブックを開き、VLOOKUPを使用してアレイに24時間データをコピーし、配列をメインブックに貼り付け、開いているワークブックに戻って別のものをコピーするマクロがあります。データセットを配列に格納します。残念なことに、最初のデータセットをコピーした後、私は「下付き文字を範囲外に」取得します。私は、その理由は、マクロ試みは、それはすでに私がループforループVBAの以前のブックを再アクティブ化

For i = 1 To 10 

ながら前に開いたワークブックを再活性化するにはどうすればよい

Sub main() 

Dim fname As String, pathfile As String, year As Long, month As Long, day As Long 
Dim version As Long, nazwa_raportu As String, miesiac As String, dzien As String 
Dim hour As Long, godzina As Long 
Dim Arr(1 To 10) As String, Data(0 To 23) As Long 
Dim i As Long, fullname As String 

Arr(1) = "somename1" 
Arr(2) = "somename2" 
Arr(3) = "somename3" 
Arr(4) = "somename4" 
Arr(5) = "somename5" 
Arr(6) = "somename6" 
Arr(7) = "somename7" 
Arr(8) = "somename8" 
Arr(9) = "somename9" 
Arr(10) = "somename10" 

For month = 1 To 12 
    If month < 10 Then 
     miesiac = "0" & month 
    Else 
     miesiac = month 
    End If 

    For day = 1 To 31 
     If day < 10 Then 
      dzien = "0" & day 
     Else 
      dzien = day 
     End If 

     Do 
      pathfile = "C:\Users\M\Documents\Reports\XXXX\ARDR\" 
      fname = pathfile & miesiac & "_" & dzien & "_" & ".xls" 
      ' if file not present skip 
      If Len(Dir(fname)) = 0 Then 
       Exit Do 
      End If 
      Workbooks.Open (fname) 
      fullname = Application.ActiveWorkbook.fullname 

      For i = 1 To 10 
       For hour = 0 To 23 
        Data(hour) = Application.WorksheetFunction.VLookup(Arr(i), Range(Cells(1, 1), Cells(100, 80)), 4 + 3 * hour, False) 
       Next hour 
       For godzina = 0 To 23 
        Workbooks("main.xlsm").Activate 
        Cells(3 + godzina * day, 1 + i * 2) = Dane(godzina) 
       Next godzina 
       Workbooks(fullname).Activate 
      Next i 

     Loop While False 
    Next day 
Next month 

を開いていていても見つけることができないというワークブックをアクティブにすることであることを知っています私はまだそのループにいるのですか?

+0

あなたは 'srcWB =ワークブック(元ブック名)を設定し'と 'trgWB =ワークブック(目標を設定しないことができますワークブック名​​) 'を使用して、前後に切り替えることができます。 – ian0411

答えて

2

(私は、私が追加した新しい行をコメントしました)以下のコードを試してみてください。

Dim NewWB As Workbook ' <-- New Workbook Object declaration 

For month = 1 To 12 
    If month < 10 Then 
     miesiac = "0" & month 
    Else 
     miesiac = month 
    End If 

    For day = 1 To 31 
     If day < 10 Then 
      dzien = "0" & day 
     Else 
      dzien = day 
     End If 

     Do 
      pathfile = "C:\Users\M\Documents\Reports\XXXX\ARDR\" 
      fname = pathfile & miesiac & "_" & dzien & "_" & ".xls" 
      ' if file not present skip 
      If Len(Dir(fname)) = 0 Then 
       Exit Do 
      End If 
      Set NewWB = Workbooks.Open(fname) '<-- Set the Opened workbook to a Workbook Object 

      For i = 1 To 10 
       For hour = 0 To 23 
        Data(hour) = Application.WorksheetFunction.VLookup(Arr(i), Range(Cells(1, 1), Cells(100, 80)), 4 + 3 * hour, False) 
       Next hour 
       For godzina = 0 To 23 
        Workbooks("main.xlsm").Activate 
        Cells(3 + godzina * day, 1 + i * 2) = Dane(godzina) 
       Next godzina 
       NewWB.Activate ' <-- activate again (inside the loop) 
      Next i 

     Loop While False 

     Set NewWB = Nothing '<-- Clear Object 
    Next day 
Next month 
+0

素晴らしい作品です!どうもありがとうございました! – Seidhe

+0

私は15の担当者を取得するとすぐに私はwiil。 :)私は今11時です。 – Seidhe

関連する問題