ОБНОВЛЕНО ДОБАВИТЬ НОВЫЙ КОД!Excel пользовательская форма для создания сводной строки после добавления переменного количества строк
Я до сих пор создал Userform, который позволяет мне вводить между 1 и 10 строками в электронную таблицу Excel в зависимости от того, сколько различных результатов теста вводится в пользовательскую форму. Это тот код, который у меня есть, который выполняет это.
Set ws = Sheets("Master")
Dim NextRow As Long
NextRow = ws.Cells(Rows.Count).End(x1Up).Offset(1, 0).Row
With Worksheets("Master").Range("A1")
.Offset(NextRow, 0).Value = Me.txtTestDate.Value
.Offset(NextRow, 1).Value = Me.txtSpraybox.Value
.Offset(NextRow, 2).Value = Me.txtRanch.Value
.Offset(NextRow, 3).Value = Me.txtFieldBox.Value
.Offset(NextRow, 4).Value = Me.txtCommbox.Value
.Offset(NextRow, 5).Value = Me.txtVarietybox.Value
.Offset(NextRow, 6).Value = "Countries"
.Offset(NextRow, 8).Value = "US"
.Offset(NextRow, 9).Value = "Europe"
.Offset(NextRow, 10).Value = "Japan"
.Offset(NextRow, 11).Value = "Canada"
.Offset(NextRow, 12).Value = "Taiwan"
.Offset(NextRow, 13).Value = "NZ"
.Offset(NextRow, 14).Value = "S. Korea"
.Offset(NextRow, 15).Value = "CX"
.Offset(NextRow, 16).Value = "RU"
.Offset(NextRow, 17).Value = "Hong"
.Offset(NextRow, 18).Value = "Singapore"
.Offset(NextRow, 19).Value = "Indonesia"
.Offset(NextRow, 20).Value = "UK"
.Offset(NextRow, 21).Value = "Germany"
.Offset(NextRow, 22).Value = "Brazil"
.Offset(NextRow, 23).Value = "Thailand"
.Offset(NextRow, 24).Value = "Mexico"
.Offset(NextRow, 25).Value = "Aus"
If Me.cboChem <> "" Then
.Offset(NextRow + 1, 6).Value = Me.cboChem.Value
.Offset(NextRow + 1, 7).Value = Me.txtResultbox.Value
End If
If Me.cboChem2 <> "" Then
.Offset(NextRow + 2, 6).Value = Me.cboChem2.Value
.Offset(NextRow + 2, 7).Value = Me.txtResultbox2.Value
End If
If Me.cboChem3 <> "" Then
.Offset(NextRow + 3, 6).Value = Me.cboChem3.Value
.Offset(NextRow + 3, 7).Value = Me.txtResultbox3.Value
End If
If Me.cboChem4 <> "" Then
.Offset(NextRow + 4, 6).Value = Me.cboChem4.Value
.Offset(NextRow + 4, 7).Value = Me.txtResultbox4.Value
End If
If Me.cboChem5 <> "" Then
.Offset(NextRow + 5, 6).Value = Me.cboChem5.Value
.Offset(NextRow + 5, 7).Value = Me.txtResultbox5.Value
End If
If Me.cboChem6 <> "" Then
.Offset(NextRow + 6, 6).Value = Me.cboChem6.Value
.Offset(NextRow + 6, 7).Value = Me.txtResultbox6.Value
End If
If Me.cboChem7 <> "" Then
.Offset(NextRow + 7, 6).Value = Me.cboChem7.Value
.Offset(NextRow + 7, 7).Value = Me.txtResultbox7.Value
End If
If Me.cboChem8 <> "" Then
.Offset(NextRow + 8, 6).Value = Me.cboChem8.Value
.Offset(NextRow + 8, 7).Value = Me.txtResultbox8.Value
End If
If Me.cboChem9 <> "" Then
.Offset(NextRow + 9, 6).Value = Me.cboChem9.Value
.Offset(NextRow + 9, 7).Value = Me.txtResultbox9.Value
End If
If Me.cboChem10 <> "" Then
.Offset(NextRow + 10, 6).Value = Me.cboChem10.Value
.Offset(NextRow + 10, 7).Value = Me.txtResultbox10.Value
End If
End With
Теперь я хотел бы добавить строку сводки, вставленную после последней заполненной строки, каждый раз при нажатии «ОК». Я занимаюсь исследованиями последние 3 дня и не смог найти ничего, что достигнет того, что я хочу. Я также видел другие способы выполнить то, что я уже сделал (я знаю, что это не лучший способ сделать то, что я хочу), которые выглядят так, как будто бы это были лучшие способы сделать это, но я всегда получаю сообщения об ошибках, когда я пытаюсь использовать другие способы ,
Я надеялся использовать что-то вроде:
NextRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row + 1
ws.Cells(NextRow, 4).Value = "Overall"
Но это не ставит его постоянно в конце списка. У меня также возникла проблема с тем, что эта форма кода работает для всех записей, но я собираюсь вернуться и попробовать сейчас, так как я просто получил этот код для запуска без предоставления сообщения об ошибке типа «Необходимый объект». Я также получаю Error 1004
.
У меня не очень много знаний по кодированию фона, но я стараюсь как можно больше учиться, насколько могу. Любое объяснение того, что делает каждая строка/почему это лучше, чем то, что у меня есть, будет очень признателен.
Не имеет отношения к этому вопросу, но можно ли написать код, который позволит userform
читать условное форматирование ячеек после ввода результатов и дать ответ «да»/«нет» на него? Например, я отформатировал мою таблицу, чтобы изменить ее на красный или зеленый на основе ограничений каждого столбца на результат в отдельном столбце, но иногда 4-5 строк являются частью каждого теста, поэтому я хочу, чтобы общая строка прохода/сбоя была конец каждого «теста», который вводится в форме пользователя.
Когда я использую этот код, я получаю сообщение об ошибке «1004», заданное или определенное объектом. –
Где вы объявляете 'NextRow' и что объявили? – Kyle
В каждом случае, когда он говорит RowCount выше, я заменил его NextRow и кодом, который вы предложили. –