Я пытаюсь создать макрос, который берет долларовую сумму и процент (2 отдельных столбца) для отчета за определенный месяц, и добавляет его в историческую рабочую книгу, показывающую все долларовые значения / проценты проекта в прошлом. Код ниже, кажется, работает, но на самом деле просто вставляет значение следующей строки из ежемесячного отчета (wb1) в следующую строку в следующем пустом столбце исторической книги (wb2). Мне нужно, чтобы оно фактически совпадало с именами проектов в wb1 и именами проектов в wb2, так что новые значения фактически приходят из правильного проекта. Я знаю, что это не работает, потому что я взял имя проекта, чтобы посмотреть, что произойдет, и макрос все еще опубликовал информацию о пропущенном имени проекта в wb2, обрезав последнее значение в конце списка проектов, когда не было больше нет занятых клеток. Таким образом, если есть 10 проектов, и я беру проект 5, данные публикуются для проектов 1-9.
Мне также нужно будет добавить новую строку, если имя проекта в wb1 не отображается в столбец A. в wb2. Новая строка будет содержать отсутствующее имя проекта и вставит сумму в долларах за этот месяц. Или, по крайней мере, скажите пользователю, что в wb2 нет конкретного имени проекта. Я не уверен, как именно я буду go делать это, но мне, по крайней мере, нужен код ниже для точного добавления значений проекта.
Любая помощь будет принята с благодарностью!
Workbooks.Open ("T:\ADMINISTRATION\Marie Presley\HistoricalFees.xlsx")
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim y As Integer
Dim sht As Worksheet
'=============================================
Dim w1 As Worksheet, w2 As Worksheet
Dim i As Long, j As Long, n As Integer
Dim NextEmptyCol As Long
Set w1 = Workbooks("Forecast Summary Report Generator.xlsm").Worksheets("Forecast Summary")
Set w2 = Workbooks("HistoricalFees.xlsx").Worksheets("Sheet1")
NextEmptyCol = w2.Cells(1, Columns.Count).End(xlToLeft).Column + 1
n = 0
For i = 1 To w2.Cells(Rows.Count, 1).End(xlUp).Row 'for each used cell in w2.colA
For j = 1 To w1.Cells(Rows.Count, 3).End(xlUp).Row + n 'for each used cell in w1.colC
'Find the text from w1.colC (current w1 row), within cell in w2.colA (current w2 row)
If InStr(1, w2.Cells(i, 1).Value, w1.Cells(j, 3).Value) > 0 Then
'If found then copy cell in w2.colB into cell in w2.colE (current w2 row)
w1.Cells(i, 8).Copy (w2.Cells(i, NextEmptyCol))
w1.Cells(i, 9).Copy (w2.Cells(i, (NextEmptyCol + 1)))
Exit For 'this exits the inner For loop
n = n + 1 'this would jump over the next cell(s) in w1, but never executes
End If
Next j
Next i
End Sub