使用 VBA 在多行中插入验证列表

Insert validation list in multiple rows using VBA

我正在制作一个电子表格来控制我办公室的财务。我制作了一个 VBA 代码,其中输入了 4 个不同的数据:i) 客户姓名; ii) 合同总价值; iii) 支付合同费用的月数; iv) 第一次付款的日期。

根据付款的月数 (iii),代码插入相同数量的行。在@Paster () 的帮助下,我能够做到这一点。

现在我有一个新问题:在每一行中,我想在第 6 列上有一个验证列表 (yes/no),我可以在其中控制是否付款。当只添加 1 行时我能够做到这一点,但我不知道如何在“If .Cells(iRow, 5) > 1 Then”开始时添加。

我希望它看起来像这样:

Client Value Date Control
John 100 01/01/2020 Yes/No
John 100 02/01/2020 Yes/No
Claire 500 01/05/2020 Yes/No

我还在学习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