Макрос для копирования данных в несколько строк с последовательной ежемесячной датой - PullRequest
0 голосов
/ 04 октября 2018

Я использую форму макроса, где я записываю сумму, которую я получаю каждый месяц X раз Пример того, как я хочу, чтобы она была

Как я могу сделать макрос, который будет продолжатьсязаполнить новые строки следующим месяцем в соответствии с тем временем, которое я зарегистрировал. Это код, который у меня есть сейчас, без добавления дополнительных строк

Private Sub CommandButton1_Click()
Dim lRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("sheets")
    lRow = ws.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row
    With ws
        .Cells(lRow, 1).Value = ""
        .Cells(lRow, 2).Value = Me.TextBox1.Value
        .Cells(lRow, 3).Value = Me.TextBox2.Value
        .Cells(lRow, 4).Value = Me.TextBox3.Value
End With
    Unload Me
End Sub

(Примечание. Это добавляет новые строки, а не за счет существующихлинии)

Я буду рад за любую помощь, идею, намерение

редактирование: Больше ясности, что я хочу

Если я напишу в форме №9 и 500 $, затем добавим 9 строк, с суммой 500 $, но с ежемесячной возрастающей датой

Я не эксперт по макросам

e

1 Ответ

0 голосов
/ 04 октября 2018

Вы хотите проверить записи.Что если пользователь поместит al;kjfdadsk в любое текстовое поле?Вы должны убедиться, что входные данные соответствуют ожиданиям.

Ограничьте входы следующим образом:

Me.TextBox1 = Number
Me.TextBox2 = Date
Me.TextBox1 = Number

Вы также можете изменить это, чтобы убедиться, что Amount не является отрицательным.Или, может быть, вы хотите установить максимум на Amount?В любом случае, стоит подумать об ограничениях, которые вы хотите разместить здесь, а затем встроить их. Я добавил в коде 3 ограничения, приведенные выше для вас.


Private Sub CommandButton1_Click()

'Validate entries    
If Not IsNumeric(Me.TextBox1) Then
    MsgBox "Invalid Amount Entry"
ElseIf Not IsDate(Me.TextBox2) Then
    MsgBox "Invalid Date Entry"
ElseIf Not IsNumeric(Me.TextBox3) Then
    MsgBox "Invalid Payment Entry"
End If

'Rest of code goes here and will be ran once the above entries are validated
Dim ws As Worksheet, LRow as Long, i as Integer
Set ws = Worksheets("sheets")

LRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Offset(1, 0).Row

ws.Range("A" & LRow) = Me.TextBox2
ws.Range(ws.Cells(LRow, 2), ws.Cells(LRow + Me.TextBox1, 2)) = Me.TextBox3

For i = (LRow + 1) To (LRow + Me.TextBox1 - 1)
    ws.Range("A" & i ) = DateAdd("m", 1, ws.Range("A" & i -1)
Next i

Unload Me

End Sub
...