Помочь понять код макроса на 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