Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос по переносу данных с одного листа на другой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Макрос по переносу данных с одного листа на другой
Shugo Дата: Среда, 21.11.2012, 17:06 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте!

Поможите пожалуйста!

В листе "приход" заполняем строки таблицы (наименования), например: добавили три строки, нажимаем кнопку "добавить". На листе "склад" должны появится эти три строки, но появляется только последняя, и сколько бы их не было (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]
К сообщению приложен файл: Uzskaite.xls (92.0 Kb)
 
Ответить
СообщениеЗдравствуйте!

Поможите пожалуйста!

В листе "приход" заполняем строки таблицы (наименования), например: добавили три строки, нажимаем кнопку "добавить". На листе "склад" должны появится эти три строки, но появляется только последняя, и сколько бы их не было (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]

Автор - Shugo
Дата добавления - 21.11.2012 в 17:06
Pelena Дата: Среда, 21.11.2012, 17:54 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19405
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
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]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
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]

Автор - Pelena
Дата добавления - 21.11.2012 в 17:54
RAN Дата: Среда, 21.11.2012, 22:35 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ошибка в том, что все вставляется в одну последнюю строку.
Можно лечить циклом, можно без цикла

[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
[/vba]

Автор - RAN
Дата добавления - 21.11.2012 в 22:35
Shugo Дата: Четверг, 22.11.2012, 12:27 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Спасибо огромное, товарищи! Вылечили! smile
 
Ответить
СообщениеСпасибо огромное, товарищи! Вылечили! smile

Автор - Shugo
Дата добавления - 22.11.2012 в 12:27
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!