Прошу помочь в написании кода для кнопки в файле 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 EndFunction
Sub ПереносСуммПоСтатьямЗатрат() Dim НайденноеЗначение As Range, Ячейка As Range, Отдел As Range, Разделы As Range, ИсходныеРазделы As Range Dim АдресПервогоНайденогоЗначения AsString, ТекущийКаталог AsString 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 Отдел IsNothingThen
MsgBox "Не удалось найти отдел: " & ЛистСИсходнымиДанными.[A1].Value ExitSub EndIf
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas) IfNot НайденноеЗначение IsNothingThen
АдресПервогоНайденогоЗначения = НайденноеЗначение.Address Do For Each Ячейка In Разделы IfTrim(Ячейка.Value) = НайденноеЗначение.Offset(0, -2).Value Then
ИзменяемыйЛист.Cells(Ячейка.Row, Отдел.Column).Value = НайденноеЗначение.Offset(0, -1).Value EndIf Next Ячейка
Option Explicit Function НомерПоследнейСтроки(Страница As Worksheet) As LongPtr
НомерПоследнейСтроки = Страница.UsedRange.Row + Страница.UsedRange.Rows.Count - 1 EndFunction
Sub ПереносСуммПоСтатьямЗатрат() Dim НайденноеЗначение As Range, Ячейка As Range, Отдел As Range, Разделы As Range, ИсходныеРазделы As Range Dim АдресПервогоНайденогоЗначения AsString, ТекущийКаталог AsString 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 Отдел IsNothingThen
MsgBox "Не удалось найти отдел: " & ЛистСИсходнымиДанными.[A1].Value ExitSub EndIf
Set НайденноеЗначение = ИсходныеРазделы.Find("*", LookIn:=xlFormulas) IfNot НайденноеЗначение IsNothingThen
АдресПервогоНайденогоЗначения = НайденноеЗначение.Address Do For Each Ячейка In Разделы IfTrim(Ячейка.Value) = НайденноеЗначение.Offset(0, -2).Value Then
ИзменяемыйЛист.Cells(Ячейка.Row, Отдел.Column).Value = НайденноеЗначение.Offset(0, -1).Value EndIf Next Ячейка