Страницы: 1
RSS
Остановка макроса если ячейка пуста
 
Добрый день! Подскажите, пожалуйста. Я новичок в VBA, пришлось писать макрос, чтобы облегчить работу. Но у меня не выходит что-то :)

Sub Макрос1()
'
' Макрос1 Макрос
'
   Range("C5";).Select
   Selection.Copy
   Sheets("Лист2";).Select
   Range("B10:H10";).Select
   ActiveSheet.Paste
   Sheets("Лист2";).Select
   ActiveWindow.SelectedSheets.PrintOut Copies:=CInt(Sheets("Лист1";).Range("D5";))
   If Range("D5";) = "" Then  как сделать, чтобы если ячейка не пустая, то макрос продолжал работать? а то у меня останавливается
   End
End If
   
   Range("C6";).Select
   Selection.Copy
   Sheets("Лист2";).Select
   Range("B10:H10";).Select
   ActiveSheet.Paste
   Sheets("Лист2";).Select
   ActiveWindow.SelectedSheets.PrintOut Copies:=CInt(Sheets("Лист1";).Range("D6";))
   If Range("D6";) = "" Then
End
End If

   Range("C7";).Select
   Selection.Copy
   Sheets("Лист2";).Select
   Range("B10:H10";).Select
   ActiveSheet.Paste
   Sheets("Лист2";).Select
   ActiveWindow.SelectedSheets.PrintOut Copies:=CInt(Sheets("Лист1";).Range("D7";))
   If Range("D7";) = "" Then
End
End If

Также вопрос, есть ли возможность как-то упростить этот макрос? У меня тут кусок на три "строчки", а их 200! И все повторяется меняются только значения по столбцам C и D
 
И к Вам вопрос: кнопку на панели видели вот такую - <...>?
Она помогает форматировать код в сообщении.
 
для организации выполнения кода в зависимости от наличия значения в ячейке, можно так:

Код
If Range("A1")<>"" Then
...набор инструкций
End If

Еще вариант, написать в отдельной процедуре, что делать, если ячейка не пустая, а проверку вынести в отдельную процедуру:
Sub Проверка()
If Range("A1")<>""
Call ЧтоДелать
End If
End Sub

Sub ЧтоДелать()
...набор инструкций, что делать, если условие выполняется
End Sub








Кому решение нужно - тот пример и рисует.
 
Писал на коленке, проверьте. А лучше файл приложите (соответствующий п.2.3 Правил форума)
Код
Sub Макрос1()
For I = 5 To 200 '5 - первая строка, 200 - нужное количество строк
    Range("C" & I).Copy Sheets("Лист2").Range("B10:H10").Select '???? вссегда вставлять в B10:H10 ???
    Sheets("Лист2").PrintOut Copies:=CInt(Sheets("Лист1").Range("D" & I))
    If Range("D" & I) = "" Then Exit For
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Gknopka, добрый день. А файлик можно посмотреть?
Учусь программировать :)
 
Цитата
Sanja написал:
Писал на коленке, проверьте. А лучше файл приложите (соответствующий п.2.3 Правил форума)  
Не выходит, ругается :(

Файл приложила, там сейчас 2 кнопки. 1 - то, что писала я, 2 - то, что Вы предложили.
 
Smiley, выложила сообщением выше :)
 
В xlsx работают кнопки?
 
Gknopka, макросов я не нашел :) А логику можете Ваших действий объяснить? Что, куда, зачем, при каких условиях копировать-печатать?
Учусь программировать :)
 
Пока ничего не понимаю( Действительно макросы пропали. Вот я ламер... Сейчас восстановлю  и выложу.

Smiley, логика такая. В B10:H10 вставляются значения из колонки C  и печатается столько копий, сколько в колонке D в той же строке.
Если значение D пустое, то макрос останавливается
Идея всего этого проста, у нас в гос. контрактах бывает 100-200 номенклатур и разного количества. на каждую сделать типовой гарантийный талон очень много времени отнимает.
 
Если делать чтоб было юзабельно - думаю нужно в код добавлять запрос с какого номера по какой печатать - т.к. возможно что зажуёт в середине процессса бумагу или ещё что случится.
И тогда кстати можно не проверять на пустоту ячейку - просто пишем что печатаем 1-125 или 51-51 или 53 и всё (смотря как это организовать в коде).
Или сделать два кода - печатать все, или печатать выборочно неудачные.
Изменено: Hugo - 23.03.2015 12:14:19
 
Как я понимаю, этот формат поддерживает все. В Макрос1 закралась еще какая-то ошибка, он вставляет значение колонки "C" в B10:H10  только 1 раз, а дальше печатает эту строчку пустую.
 
Посмотрите
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Вы гений! Спасибо!
А можете объяснить, чтобы знать, что означает
Код
Application.ScreenUpdating = False
lRow = Лист1.Cells(Rows.Count, 3).End(xlUp).Row
 
1. Отключаем обновление экрана, что-бы не было видно переключения между листами. В конце макроса включаем
2. Определяем последнюю строку с данными в столбце С
З.Ы.
Цитата
Вы гений!
мелочь, а приятно :D
Изменено: Sanja - 23.03.2015 12:48:47
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх