В листе "приход" заполняем строки таблицы (наименования), например: добавили три строки, нажимаем кнопку "добавить". На листе "склад" должны появится эти три строки, но появляется только последняя, и сколько бы их не было (2 или 20), все равно в лист "склад" добавляется только последняя строка. Посмотрите пожалуйста где ошибка.
Спасибо!
[vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "склад" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Слад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Cells(lrlog, 1).Value = "Приход" wsLog.Cells(lrlog, 2).Value = ws.[e4].Value wsLog.Cells(lrlog, 3).Value = ws.[e4].Value wsLog.Cells(lrlog, 4).Value = ws.[e3].Value wsLog.Cells(lrlog, 5).Value = ws.[e5].Value wsLog.Cells(lrlog, 6).Value = ws.Cells(lr, 1).Value wsLog.Cells(lrlog, 7).Value = ws.Cells(lr, 6).Value wsLog.Cells(lrlog, 8).Value = ws.Cells(lr, 7).Value wsLog.Cells(lrlog, 9).Value = ws.Cells(lr, 8).Value
End Sub
[/vba]
Здравствуйте!
Поможите пожалуйста!
В листе "приход" заполняем строки таблицы (наименования), например: добавили три строки, нажимаем кнопку "добавить". На листе "склад" должны появится эти три строки, но появляется только последняя, и сколько бы их не было (2 или 20), все равно в лист "склад" добавляется только последняя строка. Посмотрите пожалуйста где ошибка.
Спасибо!
[vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "склад" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Слад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Cells(lrlog, 1).Value = "Приход" wsLog.Cells(lrlog, 2).Value = ws.[e4].Value wsLog.Cells(lrlog, 3).Value = ws.[e4].Value wsLog.Cells(lrlog, 4).Value = ws.[e3].Value wsLog.Cells(lrlog, 5).Value = ws.[e5].Value wsLog.Cells(lrlog, 6).Value = ws.Cells(lr, 1).Value wsLog.Cells(lrlog, 7).Value = ws.Cells(lr, 6).Value wsLog.Cells(lrlog, 8).Value = ws.Cells(lr, 7).Value wsLog.Cells(lrlog, 9).Value = ws.Cells(lr, 8).Value
Ошибка в том, что для вывода нескольких строк нужен цикл Вариант (на оптимальность не претендую) [vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "склад" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Склад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub For i& = 8 To lr lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Cells(lrlog, 1).Value = "Приход" wsLog.Cells(lrlog, 2).Value = ws.[e4].Value wsLog.Cells(lrlog, 3).Value = ws.[e4].Value wsLog.Cells(lrlog, 4).Value = ws.[e3].Value wsLog.Cells(lrlog, 5).Value = ws.[e5].Value wsLog.Cells(lrlog, 6).Value = ws.Cells(i&, 1).Value wsLog.Cells(lrlog, 7).Value = ws.Cells(i&, 6).Value wsLog.Cells(lrlog, 8).Value = ws.Cells(i&, 7).Value wsLog.Cells(lrlog, 9).Value = ws.Cells(i&, 8).Value Next i& End Sub
[/vba]
Quote (Shugo)
Посмотрите пожалуйста где ошибка
Ошибка в том, что для вывода нескольких строк нужен цикл Вариант (на оптимальность не претендую) [vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "склад" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Склад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub For i& = 8 To lr lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Cells(lrlog, 1).Value = "Приход" wsLog.Cells(lrlog, 2).Value = ws.[e4].Value wsLog.Cells(lrlog, 3).Value = ws.[e4].Value wsLog.Cells(lrlog, 4).Value = ws.[e3].Value wsLog.Cells(lrlog, 5).Value = ws.[e5].Value wsLog.Cells(lrlog, 6).Value = ws.Cells(i&, 1).Value wsLog.Cells(lrlog, 7).Value = ws.Cells(i&, 6).Value wsLog.Cells(lrlog, 8).Value = ws.Cells(i&, 7).Value wsLog.Cells(lrlog, 9).Value = ws.Cells(i&, 8).Value Next i& End Sub
Ошибка в том, что все вставляется в одну последнюю строку. Можно лечить циклом, можно без цикла
[vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "приход" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Склад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row k = lr - 7 If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Range("A" & lrlog).Resize(k).Value = "Приход" wsLog.Range("B" & lrlog).Resize(k, 2).Value = ws.Range("e4").Value wsLog.Range("D" & lrlog).Resize(k).Value = ws.Range("e3").Value wsLog.Range("E" & lrlog).Resize(k).Value = ws.Range("e5").Value wsLog.Range("F" & lrlog).Resize(k).Value = ws.Range("A8").Resize(k).Value wsLog.Range("G" & lrlog).Resize(k, 3).Value = ws.Range("F8").Resize(k, 3).Value End Sub
[/vba]
Ошибка в том, что все вставляется в одну последнюю строку. Можно лечить циклом, можно без цикла
[vba]
Code
Sub Автофигура5_Щелкнуть() ' "добавить" на листе "приход" Dim ws As Worksheet, wsLog As Worksheet, lr&, lrlog&, i&
Set ws = ActiveSheet: Set wsLog = ThisWorkbook.Sheets("Склад") lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row k = lr - 7 If ws.[e3] = Empty Then MsgBox "Введите номер накладной": Exit Sub If ws.[e4] = Empty Then MsgBox "Введите дату накладной": Exit Sub If ws.[e5] = Empty Then MsgBox "Введите контрагента": Exit Sub If lr = 7 Then MsgBox "Заполните список материалов": Exit Sub lrlog = wsLog.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 wsLog.Range("A" & lrlog).Resize(k).Value = "Приход" wsLog.Range("B" & lrlog).Resize(k, 2).Value = ws.Range("e4").Value wsLog.Range("D" & lrlog).Resize(k).Value = ws.Range("e3").Value wsLog.Range("E" & lrlog).Resize(k).Value = ws.Range("e5").Value wsLog.Range("F" & lrlog).Resize(k).Value = ws.Range("A8").Resize(k).Value wsLog.Range("G" & lrlog).Resize(k, 3).Value = ws.Range("F8").Resize(k, 3).Value End Sub