Прошу помочь в написании кода для кнопки в файле 01_HR_OPEX_individual_plan. Данная кнопка должна переносить значения по статьям затрат в файл Budget2022_Template.
Например статья IT Hardware (expensed) - 110 000. Должно перенестись 110000 в ячейку R30. Flight expenses/ 3rd/ Remaining - 200 000. 200 000 должно перенестись в ячейку R15 и тд. Нюанс в том, что ячейки могут меняться, поэтому дл соотнесения в таблицу Budget сделана желтая строчка, где название отдела соотносится с названием в файле по плану в ячейке А1. В данном случае это название HR.
Буду рад любой помощи или наводки.
Всем доброго времени суток!
Прошу помочь в написании кода для кнопки в файле 01_HR_OPEX_individual_plan. Данная кнопка должна переносить значения по статьям затрат в файл Budget2022_Template.
Например статья IT Hardware (expensed) - 110 000. Должно перенестись 110000 в ячейку R30. Flight expenses/ 3rd/ Remaining - 200 000. 200 000 должно перенестись в ячейку R15 и тд. Нюанс в том, что ячейки могут меняться, поэтому дл соотнесения в таблицу Budget сделана желтая строчка, где название отдела соотносится с названием в файле по плану в ячейке А1. В данном случае это название HR.
Option Explicit Function НомерПоследнейСтроки(Страница As Worksheet) As LongPtr НомерПоследнейСтроки = Страница.UsedRange.Row + Страница.UsedRange.Rows.Count - 1 End Function
Sub ПереносСуммПоСтатьямЗатрат() Dim НайденноеЗначение As Range, Ячейка As Range, Отдел As Range, Разделы As Range, ИсходныеРазделы As Range Dim АдресПервогоНайденогоЗначения As String, ТекущийКаталог As String Dim ЛистСИсходнымиДанными As Worksheet, ИзменяемыйЛист As Worksheet
Application.ScreenUpdating = False ТекущийКаталог = ActiveWorkbook.Path Set ЛистСИсходнымиДанными = ActiveWorkbook.Sheets("OPEX forms") Set ИсходныеРазделы = ЛистСИсходнымиДанными.Range(ЛистСИсходнымиДанными.Cells(3, 7), ЛистСИсходнымиДанными.Cells(НомерПоследнейСтроки(ЛистСИсходнымиДанными), 7))
Workbooks.Open (ТекущийКаталог & "\Budget2022_Temp.xls") Set ИзменяемыйЛист = ActiveWorkbook.Sheets("BUDGET 2022 Template") Set Разделы = ИзменяемыйЛист.Range(ИзменяемыйЛист.Cells(4, 1), ИзменяемыйЛист.Cells(НомерПоследнейСтроки(ИзменяемыйЛист), 1)) Set Отдел = ИзменяемыйЛист.Range(ИзменяемыйЛист.Cells(1, 4), ИзменяемыйЛист.Cells(1, 25)).Find(ЛистСИсходнымиДанными.[A1].Value, LookIn:=xlValues, LookAt:=xlWhole)
If Отдел Is Nothing Then MsgBox "Не удалось найти отдел: " & ЛистСИсходнымиДанными.[A1].Value Exit Sub End If
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas) If Not НайденноеЗначение Is Nothing Then АдресПервогоНайденогоЗначения = НайденноеЗначение.Address Do For Each Ячейка In Разделы If Trim(Ячейка.Value) = НайденноеЗначение.Offset(0, -2).Value Then ИзменяемыйЛист.Cells(Ячейка.Row, Отдел.Column).Value = НайденноеЗначение.Offset(0, -1).Value End If Next Ячейка
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas, After:=НайденноеЗначение) Loop While АдресПервогоНайденогоЗначения <> НайденноеЗначение.Address End If
Workbooks("Budget2022_Temp.xls").Close (True) Application.ScreenUpdating = True End Sub
[/vba]
[vba]
Код
Option Explicit Function НомерПоследнейСтроки(Страница As Worksheet) As LongPtr НомерПоследнейСтроки = Страница.UsedRange.Row + Страница.UsedRange.Rows.Count - 1 End Function
Sub ПереносСуммПоСтатьямЗатрат() Dim НайденноеЗначение As Range, Ячейка As Range, Отдел As Range, Разделы As Range, ИсходныеРазделы As Range Dim АдресПервогоНайденогоЗначения As String, ТекущийКаталог As String Dim ЛистСИсходнымиДанными As Worksheet, ИзменяемыйЛист As Worksheet
Application.ScreenUpdating = False ТекущийКаталог = ActiveWorkbook.Path Set ЛистСИсходнымиДанными = ActiveWorkbook.Sheets("OPEX forms") Set ИсходныеРазделы = ЛистСИсходнымиДанными.Range(ЛистСИсходнымиДанными.Cells(3, 7), ЛистСИсходнымиДанными.Cells(НомерПоследнейСтроки(ЛистСИсходнымиДанными), 7))
Workbooks.Open (ТекущийКаталог & "\Budget2022_Temp.xls") Set ИзменяемыйЛист = ActiveWorkbook.Sheets("BUDGET 2022 Template") Set Разделы = ИзменяемыйЛист.Range(ИзменяемыйЛист.Cells(4, 1), ИзменяемыйЛист.Cells(НомерПоследнейСтроки(ИзменяемыйЛист), 1)) Set Отдел = ИзменяемыйЛист.Range(ИзменяемыйЛист.Cells(1, 4), ИзменяемыйЛист.Cells(1, 25)).Find(ЛистСИсходнымиДанными.[A1].Value, LookIn:=xlValues, LookAt:=xlWhole)
If Отдел Is Nothing Then MsgBox "Не удалось найти отдел: " & ЛистСИсходнымиДанными.[A1].Value Exit Sub End If
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas) If Not НайденноеЗначение Is Nothing Then АдресПервогоНайденогоЗначения = НайденноеЗначение.Address Do For Each Ячейка In Разделы If Trim(Ячейка.Value) = НайденноеЗначение.Offset(0, -2).Value Then ИзменяемыйЛист.Cells(Ячейка.Row, Отдел.Column).Value = НайденноеЗначение.Offset(0, -1).Value End If Next Ячейка
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas, After:=НайденноеЗначение) Loop While АдресПервогоНайденогоЗначения <> НайденноеЗначение.Address End If
Workbooks("Budget2022_Temp.xls").Close (True) Application.ScreenUpdating = True End Sub