2017-01-19 2 views
1

Мой код открывает несколько файлов .XLS и выполняет функцию SumIF с активной книгой. Моего кода есть вопрос, где я комментарий 'Pmax BM, 'Available Declaration и 'Generation Schedule (колонок CDE с экрана печати)VBA Lohe WorksheetFunction.SumIf on Active Workbook

Я думаю, что здесь моя проблема TW.Range(Cells(i, 1), Cells(i + 23, 1)=, потому что я поставил весь диапазон с результатами SumIf, и именно поэтому я имеют те же результаты, что range.`

Dim data As Date 
Dim rng As Range 
Dim TW As Worksheet: Set TW = ThisWorkbook.Worksheets("Centralizator Lunar") 

i = 2 
j = 20 
StrFile = ThisWorkbook.Path 
StrFile = Dir(StrFile & "\*INT2*") 
    Do While Len(StrFile) > 0 
     TW_P = ThisWorkbook.Path 
     myfile = TW_P & "\" & StrFile 
     Set AWb = Workbooks.Open(myfile) 
     data = Left(ActiveWorkbook.Name, 10) 
     nr_AWb = ActiveWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count 

     'Data 
     TW.Range(Cells(i, 1), Cells(i + 23, 1)) = data 

     'Pmax BM 
     TW.Range(Cells(i, 3), Cells(i + 23, 3)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("N20:N" & nr_AWb)) 

     'Available Declaration 
     TW.Range(Cells(i, 4), Cells(i + 23, 4)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("I20:I" & nr_AWb)) 

     'Generation Schedule 
     TW.Range(Cells(i, 5), Cells(i + 23, 5)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("H20:H" & nr_AWb)) 

    i = i + 24 
    j = j + 1 


StrFile = Dir 
ActiveWindow.Close SaveChanges:=False 
    Loop 

ответ

1

Я не понимаю, что вы просите, но внесли некоторые изменения в свой код, который может помочь в решении вашей проблемы (добавление ссылок на листы к диапазонам):

Dim data As Date 
Dim rng As Range 
Dim TW As Worksheet: Set TW = ThisWorkbook.Worksheets("Centralizator Lunar") 

i = 2 
j = 20 
StrFile = ThisWorkbook.Path 
StrFile = Dir(StrFile & "\*INT2*") 
    Do While Len(StrFile) > 0 
     TW_P = ThisWorkbook.Path 
     myfile = TW_P & "\" & StrFile 
     Set AWb = Workbooks.Open(myfile) 
     data = Left(ActiveWorkbook.Name, 10) 
     nr_AWb = ActiveWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count 

     'Data 
     TW.Range(TW.Cells(i, 1), TW.Cells(i + 23, 1)) = data 

     'Pmax BM 
     TW.Range(TW.Cells(i, 3), TW.Cells(i + 23, 3)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("N20:N" & nr_AWb)) 

     'Available Declaration 
     TW.Range(TW.Cells(i, 4), TW.Cells(i + 23, 4)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("I20:I" & nr_AWb)) 

     'Generation Schedule 
     TW.Range(TW.Cells(i, 5), TW.Cells(i + 23, 5)) = WorksheetFunction.SumIf(AWb.Worksheets("Sheet1").Range("D20:D" & nr_AWb), _ 
        AWb.Worksheets("Sheet1").Cells(j, 4), _ 
        AWb.Worksheets("Sheet1").Range("H20:H" & nr_AWb)) 
     i = i + 24 
     j = j + 1 
     StrFile = Dir 
     ActiveWindow.Close SaveChanges:=False 
    Loop 
+0

Привет, Мой вопрос: почему 'j' из' .Cells (j, 4) 'всегда имеет значение' 20'? потому что здесь начинается проблема. – BOB

+0

'j' инициализируется как 20, так что, предположительно, ваш цикл работает только один раз? – SJR

+0

Нет, я запускаю в своем примере 5 раз, потому что у меня есть 5 файлов в моей папке – BOB

Смежные вопросы