Вставьте список проверки в несколько строк с помощью VBA

Я делаю электронную таблицу, чтобы контролировать финансы моего офиса. Я сделал код VBA, где я ввожу 4 разных данных: i) имя клиента; ii) Общая стоимость контракта; iii) количество месяцев, в течение которых контракт будет оплачен; iv) Дата первого платежа.

В зависимости от количества месяцев, в течение которых будет производиться оплата (iii), код вставляет одинаковое количество строк. С помощью @Paster (ссылка на вопрос) мне это удалось.

Теперь у меня новый вопрос: в каждой новой строке я хочу иметь список проверки (да/нет) в столбце 6, где я могу контролировать, был ли произведен платеж или нет. Я смог сделать это, когда добавлена ​​​​только 1 строка, но я не знаю, как добавить, когда срабатывает «If .Cells (iRow, 5) > 1 Then».

Я хочу, чтобы это выглядело так:

Клиент Ценить Дата Контроль Джон 100 01.01.2020 Да нет Джон 100 01.02.2020 Да нет Клэр 500 05.01.2020 Да нет

Я все еще изучаю 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
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
307
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возьмите ту же логику проверки, что и для одной строки, а также включите ее в цикл, где вы копируете значения в каждую строку (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

Другие вопросы по теме