Я делаю электронную таблицу, чтобы контролировать финансы моего офиса. Я сделал код VBA, где я ввожу 4 разных данных: i) имя клиента; ii) Общая стоимость контракта; iii) количество месяцев, в течение которых контракт будет оплачен; iv) Дата первого платежа.
В зависимости от количества месяцев, в течение которых будет производиться оплата (iii), код вставляет одинаковое количество строк. С помощью @Paster (ссылка на вопрос) мне это удалось.
Теперь у меня новый вопрос: в каждой новой строке я хочу иметь список проверки (да/нет) в столбце 6, где я могу контролировать, был ли произведен платеж или нет. Я смог сделать это, когда добавлена только 1 строка, но я не знаю, как добавить, когда срабатывает «If .Cells (iRow, 5) > 1 Then».
Я хочу, чтобы это выглядело так:
Я все еще изучаю VBA, и я просто не могу понять.
Фактический код:
Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
Dim Name As String
Dim counter As Integer
Dim money As Double
Dim Data As Date
Dim i As Integer
Set ws = Worksheets("Projetos")
'find first empty row in database
iRow = ws.Cells.Find(What: = "*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
'copy the data to the database
With ws
.Cells(iRow, 2).Value = Me.boxCliente.Value 'Client info
.Cells(iRow, 3) = CCur(boxValor.Value) 'Value
.Cells(iRow, 5).Value = Me.boxParcela.Value '# of payments
.Cells(iRow, 4) = CDate(boxData.Value) 'Date
'add validation list to row
With Cells(iRow, 6).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1: = "Não,Sim"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Cells(iRow, 6).Value = "Não"
'if multiple payments, then
If .Cells(iRow, 5) > 1 Then
Name = .Cells(iRow, 2).Value
counter = .Cells(iRow, 5).Value
money = .Cells(iRow, 3).Value
Data = .Cells(iRow, 4).Value
For i = 0 To counter - 1
.Cells(iRow + i, 2).Value = Name
.Cells(iRow + i, 3).Value = money / counter
.Cells(iRow + i, 4).Value = Format(DateAdd("m", i, Data), "mm/dd/yyyy")
Next i
End If
End With
'clear the data
Me.boxCliente.Value = ""
Me.boxValor.Value = ""
Me.boxParcela.Value = ""
Me.boxData.Value = ""
End Sub


Возьмите ту же логику проверки, что и для одной строки, а также включите ее в цикл, где вы копируете значения в каждую строку (For i = 1 to counter - 1)
For i = 0 To counter - 1
.Cells(iRow + i, 2).Value = Name
.Cells(iRow + i, 3).Value = money / counter
.Cells(iRow + i, 4).Value = Format(DateAdd("m", i, Data), "mm/dd/yyyy")
'add validation list to row
With Cells(iRow, 6).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1: = "Não,Sim"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Cells(iRow, 6).Value = "Não"
Next i