Помочь понять код макроса на VisualBasic (Excel)

Есть код:

Sub additem()
Dim lastrow#, i#, b As Range
Set b = Sheets("База").Columns("A:A").Find(What:=Sheets("Контрольный лист").Range("pole1").Value)
If b Is Nothing Then
 lastrow = Sheets("База").Cells(Rows.Count, 1).End(xlUp).Row + 1
 Else
 lastrow = b.Row
End If
 For i = 1 To 42
  Sheets("База").Cells(lastrow, i) = Sheets("Контрольный лист").Range("pole" & i)
 Next
 Range("pole1").FormulaR1C1 = "=MAX(База!C[-37])+1"
End Sub
Sub insitem(lastrow As Integer)
With Sheets("Контрольный лист")
.Unprotect
Dim i#
For i = 1 To 42
    .Range("pole" & i).Value = Sheets("База").Cells(lastrow, i).Value
 Next
 .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 End With
End Sub
Форма:

Option Explicit

Private Sub CommandButton1_Click()
If OptionButton1.Value Then
ActiveCell.EntireRow.Delete
Else
insitem ActiveCell.Row
Sheets("Êîíòðîëüíûé ëèñò").Activate
 End If
 UserForm1.Hide
End Sub

Private Sub OptionButton1_Click()

End Sub
введите сюда описание изображения

Я не могу понять код,. Писал его мой друг, а объяснять он не умеет и хочет, чтобы я с этим кодом, как программист (правда, на python), что-то сделал.

Поэтому, можете, пожалуйста, как можно подробнее объяснить код, а далее я сам разберусь.

Заранее, спасибо!


Ответы (1 шт):

Автор решения: vikttur
Sub additem()
Dim lastrow#, i#, b As Range ' оъявление переменных, массивов'

    ' диапазон в переменную (ищем  в столбце А значение именованного диапазона pole1)'
    Set b = Sheets("База").Columns("A:A").Find(What:=Sheets("Контрольный лист").Range("pole1").Value)

    If b Is Nothing Then ' если переменная неопределена'
        ' в перемую lastrow - номер последнецй строки с данными в первом столбце'
        lastrow = Sheets("База").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Else  ' иначе
        lastrow = b.Row ' в перемую lastrow строка диапазона b'
    End If

    For i = 1 To 42 ' цикл (42 итерации)'
        ' заполняем столбец i листа "База" значениями с другого листа'
        Sheets("База").Cells(lastrow, i) = Sheets("Контрольный лист").Range("pole" & i)
    Next

    ' В диапазон "pole1" записываем формулу'
    Range("pole1").FormulaR1C1 = "=MAX(База!C[-37])+1"
End Sub

Sub insitem(lastrow As Integer)
    With Sheets("Контрольный лист")
        ' между With/End With ссылки с точкой слева относятся к указаному родителю'
        .Unprotect ' снимаем защиту листа'
        Dim i# ' оъявление переменной'

        For i = 1 To 42 ' цикл (42 итерации)'
            ' в диапазон "pole" значения из листа "База"'
            .Range("pole" & i).Value = Sheets("База").Cells(lastrow, i).Value
        Next

        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' ставим защиту'
    End With
End Sub
→ Ссылка