Почему это автоматически не публикует следующую запись в следующей строке?

Я создал этот код, чтобы сидеть на кнопке, принадлежащей пользовательской форме...

    Private Sub CommandButton1_Click()

Dim lngWriteRow As Long

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

NextRow = Cells(Rows.Count, 2).End(xlUp).Row + 1

lngWriteRow = ws.Cells(Rows.Count, 2).End(xlUp) _
.Offset(12, 0).NextRow

    ws.Range("B" & lngWriteRow) = TextBox1.Value
    ws.Range("C" & lngWriteRow) = TextBox2.Value
    ws.Range("D" & lngWriteRow) = TextBox3.Value
    ws.Range("E" & lngWriteRow) = ComboBox1.Value
    ws.Range("F" & lngWriteRow) = TextBox4.Value
    ws.Range("G" & lngWriteRow) = ComboBox2.Value

End Sub

Он не будет автоматически переходить к следующей строке и перезапишет строку номер 14, когда я хочу, чтобы она обновляла 15, когда в 14 есть данные, затем, когда 15 делает, обновляет 16 и так далее...

Есть идеи?


person user1662306    schedule 20.11.2012    source источник
comment
ряд 14 ваш первый ряд? потому что вы, скорее всего, не используете переменную!   -  person CustomX    schedule 20.11.2012
comment
первая строка, в которую я хочу, чтобы данные были вставлены да   -  person user1662306    schedule 20.11.2012
comment
Разве вы не задали тот же вопрос здесь? stackoverflow.com/questions/13472425/   -  person BenjiBoyWick    schedule 20.11.2012
comment
это сработало и вставило данные в лист, но не туда, куда я хочу, и автоматически перейти к следующей строке   -  person user1662306    schedule 20.11.2012
comment
я хочу, чтобы данные поступали в B13 - G13, затем в B14 - G14 и так далее   -  person user1662306    schedule 20.11.2012
comment
lngWriteRow = ws.Cells(Rows.Count, 1) -> опять же, это неверно, потому что вы добавляете-данные только в столбцы, B-G, так что должно быть 2-7 ;)   -  person Jook    schedule 20.11.2012
comment
добавьте проверку, чтобы найти последнюю строку, и используйте эту переменную + 1, у вас всегда будет строка ниже.   -  person CustomX    schedule 20.11.2012
comment
NextRow = Cells(Rows.Count, "A").End(xlUp).Row + 1 используйте NextRow в качестве переменной, чтобы указать, какую строку использовать.   -  person CustomX    schedule 20.11.2012
comment
ах - я думаю, что я понял, где мы неправильно поняли, но я продолжу ваш первоначальный вопрос - это должно быть удалено.   -  person Jook    schedule 20.11.2012
comment
где бы я разместил эту переменную?   -  person user1662306    schedule 20.11.2012
comment
@user1662306 user1662306 посмотри на мою правку в твоем первоначальном вопросе. t.thielemans может не работать, потому что он также использует colA, который вы, похоже, не меняете, поэтому он не работает. Пожалуйста, не оставляйте CODE в качестве комментария! - поместите это в свой ПЕРВОНАЧАЛЬНЫЙ ВОПРОС как редактирование!   -  person Jook    schedule 20.11.2012
comment
можешь заново отредактировать? я думаю, что ваш не показывает...   -  person user1662306    schedule 20.11.2012
comment
он должен: stackoverflow.com/a/13472612/1370465   -  person Jook    schedule 20.11.2012
comment
это не работает, см. другой вопрос   -  person user1662306    schedule 20.11.2012


Ответы (2)


Поскольку вы размещаете данные только в столбцах B и далее, вы должны смотреть на эти столбцы, а не на столбец A, как это делает ваш код в настоящее время. Это должно исправить это:

lngWriteRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(12, 0).Row + 1
person John Bustos    schedule 20.11.2012

Хотя Джон, кажется, попал в самую точку, я думаю, что вы можете еще больше упростить свой код, как это. Смотрите мой комментарий под тем, где назначено lngWriteRow:

Private Sub CommandButton1_Click()

Dim lngWriteRow As Long

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

With ws

    '-> if you are going to offset 12 rows then add 1 more, just offset to 13 and be done!
    lngWriteRow = .Cells(.Rows.Count, 2).End(xlUp).Offset(13, 0).Row

    .Range("B" & lngWriteRow) = TextBox1.Value
    .Range("C" & lngWriteRow) = TextBox2.Value
    .Range("D" & lngWriteRow) = TextBox3.Value
    .Range("E" & lngWriteRow) = ComboBox1.Value
    .Range("F" & lngWriteRow) = TextBox4.Value
    .Range("G" & lngWriteRow) = ComboBox2.Value

End With

End Sub
person Scott Holtzman    schedule 20.11.2012