Страницы: 1
RSS
Макрос определения пустой строки, Прошу помощи в допиливании макроса
 
Доброго дня, сообщество.
В очередной раз обращаюсь за помощью коллективного разума.
При помощи уроков Николая Павлова делаю себе инструмент для разнесения затрат.
Лист на котором происходит заполнение данных "ВВОД ДАННЫХ СЧЕТА", к кнопке привязан макрос, который переносит данные из формы на лист "BIGDATA" :)
и очищает форму для воода следующего счета. Макрос составлен по примеру, собственных знаний VBA пока не хватает, т.ч. любые замечания и исправления приму с благодарностью.
Собственно вопрос, как сделать, чтобы макрос понимал, что следующая строка для воода не заполнена и переносил только те строки, которые заполнены? Сейчас переносит все 10 строк, включая пустые. Не особо критично, впоследствии моножно руками вычистить пустые строки из BIGDATA, но хотелось бы сразу сделать как надо.
если вас незаслуженно обидели, вернитесь и заслужите
 
А что делать, если строка заполнена частично?
(Пишу новый макрос)
 
teofast, здравствуйте
Макрос, конечно, волшебный  :D ща сделаю свой вариант ;)
Изменено: Jack Famous - 02.07.2020 11:45:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Юрий М написал: А что делать, если строка заполнена частично?
Согласен, справедливое замечание. тогда буду думать над тем, как проверить полностью ли заполнена строка.
если вас незаслуженно обидели, вернитесь и заслужите
 
teofast, что-то не очень понятно но просто заменил на цикл.
Код
Sub Add_BigData()
Dim i As Long
    For i = 9 To 27 Step 2
    If Worksheets("ВВОД ДАННЫХ СЧЕТА").Cells(i, 3) <> "" Then
    
    Worksheets("ВВОД ДАННЫХ СЧЕТА").Range("A" & i + 1 & ":L" & i + 1).Copy                     'копируем строчку с данными из формы ввода A10:L10
    n = Worksheets("BIGDATA").Cells(Rows.Count, 1).End(xlUp).Row               'определяем номер последней строки на листе "BIGDATA"
    Worksheets("BIGDATA").Cells(n + 1, 1).PasteSpecial Paste:=xlPasteValues 'вставляем данные в следующую пустую строку
    
    End If
    Next i
    
    Worksheets("ВВОД ДАННЫХ СЧЕТА").Range("C9,c11,c13,c15,c17,c19,c21,c23,c25,c27,E9,e11,e13,e15,e17,e19,e21,e23,e25,e27,G9,g11,g13,g15,g17,g19,g21,g23,g25,g27").ClearContents               'очищаем форму
    Worksheets("ВВОД ДАННЫХ СЧЕТА").Range("K9,k11,k13,k15,k17,k19,k21,k23,k25,k27,M9,m11,m13,m15,m17,m19,m21,m23,m25,m27,O9,o11,o13,o15,o17,o19,o21,o23,o25,o27,Q9,q11,q13,q15,q17,q19,q21,q23,q25,q27").ClearContents               'очищаем форму
    Worksheets("ВВОД ДАННЫХ СЧЕТА").Range("O2,O4,O6").ClearContents               'очищаем форму
End Sub

Не бойтесь совершенства. Вам его не достичь.
 
Цитата
teofast написал:
буду думать над тем, как проверить полностью ли заполнена строка.
Мы свми проверим - Вы просто скажите - копировать неполную строку или нет?
 
Не полностью заполненную строку не нужно переносить.
в идеале, конечно же, какое-то сообщение выводить

Mershik,спасибо, это то, что было нужно.
если вас незаслуженно обидели, вернитесь и заслужите
 
Цитата
teofast написал:
в идеале, конечно же, какое-то сообщение выводит
Можно и выводить, но не вижу смысла: Вы увидите, что некоторые строки не очищены.
Проверьте вариант.
 
Юрий М, спасибо вам за помощь.

Работает, но с огрехами, если позволите.
Во-первых, при очистке
Код
Range(Cells(i, 3), Cells(i, 17)).ClearContents
стираются также и формулы в ячейках сумма по строке (i9 и вниз), я поэтому применял просто перечисление.

Второе, при очищении не очищаются ячейки с "Дата", "Счет №" и "Контрагент" (o2, o4, o6)
если вас незаслуженно обидели, вернитесь и заслужите
 
1. Да, тогда следует просто перечислить ячейки (диапазоны) которые нужно очищать, чтобы не затронуть формулы.
2. Я специально не очищал шапку: в одну дату может быть несколько операция, да и в случае частично заполненной строки не придётся заново вводить эти данные.Хотя, илжно добавить проверку, чтобы шапку очищать ТОЛЬКО в случае, когда все строки полные.
 
В целом, то, что хотел, я получил.
Спасибо всем участникам обсуждения за помощь. Вопрос считаю закрытым.
Не болейте!
если вас незаслуженно обидели, вернитесь и заслужите
 
Цитата
teofast: Вопрос считаю закрытым
будет обидно, если я напрасно возился, создавая отличный макрос с нуля  :cry:
Код
  • не нужно между строками никаких форму вводить - макрос сам всё ищет и проверяет
  • лист с формой защищён (без пароля)
  • присутствуют сообщения об ошибках и итоговое сообщение об успехе (время выполнения макроса - в заголовке сообщения)
Изменено: Jack Famous - 02.07.2020 14:24:43
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, на такое, если честно, я даже и не расчитывал. :)
Вы большой мастер. Спасибо за потраченное время и за помощь.
Вы все потрясающие!
если вас незаслуженно обидели, вернитесь и заслужите
 
teofast, пожалуйста  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх