Страницы: 1
RSS
Учитывание условий для вставки из массива
 
Здравствуйте!
На работе столкнулся с необходимостью иногда распечатывать адреса на конверты. Какой-то адрес нужен 4 раза, какой-то 1, а каких-то и 10-15. Вообщем я сделал разграфленку на 25 квадратиков, и решил, что можно на одном листе набрать часто используемые адреса и проставить условия: нужно ли его печатать и если нужно то сколько раз. Нужно что бы макрос учитывал эти два условия и в зависимости от количества заполнял на листе "Печать" адреса. Я пока дошел до того, что макрос проставляет все заготовленные адреса по квадратикам. Но как сделать чтобы учитывались условия: нужно ли этот адрес печатать и если нужно то сколько раз? Ничего в голову не лезет. Может у кого-то будет подсказка? В приложенном примере надеюсь условие будет более понятней.
 
По поводу кол-ва копий -  поиграйтесь с макрорекордером.
Он выдаст примерно следующее:
Код
Range(".....").Select
Selected.PrintOut Copes:=1
Как выбрать нужный диапазон Вы и так знаете.
Код
ClearContents' очистка содержимого не трогая форматы ячеек
Application.ScreenUpdating = False' для отключения обновления экрана
Изменено: oldy7 - 31.12.2017 01:57:16
 
Цитата
oldy7 написал:
По поводу кол-ва копий -  поиграйтесь с макрорекордером.
Он выдаст примерно следующее:Код ? 12Range(".....").SelectSelected.PrintOut Copes:=1
Если честно - ничего не понял из этого совета...
 
Что тут понимать то... Вам нужно распечатать в зависимости от условий энное кол-во копий. Как и раньше обрабатываете диапазоны, только сразу с кол-вом копий для печати. Если диапазон не пустой , то печать по кол-ву копий проставленных в ранее заполненном диапазоне. Совет выше касался непосредственно печати. "Selection" заменяете нужным диапазоном.
 
Ну вот к примеру, первый адрес мне нужно вставить в 4 квадратика, как указать что следующий адрес нужно начинать заполнять с пятого? Или к примеру 1-й адрес пропустить, а второй адрес нужно в 7 квадратиков заполнить, а потом как указать чтобы следующий адрес вставлялся с 8-го?
 
А зачем Вам столько квадратов одинаковых? Можно же распечатать выделенный диапазон столько раз, сколько Вам нужно.
 
Там нужен ещё один цикл - по количеству копий этих адресов. Уже делаю, но как-то пока туго... :)
Во, вроде так:
Код
Option Explicit

Sub AdresaPechat()    'компоновка адресов для распечатки
'предварительно очищаем лист для печати
    Sheets("Печать").Activate
    Range("a1:e50") = ""
    Dim z As Range
    Dim arr1(1 To 25, 1 To 9) As Variant
    'Dim arr2(1 To 25, 1 To 9) As Variant
    Dim a1 As Integer, c As Integer

    Dim Aa1 As Integer, b As Integer, x As Integer, y As Integer

    ' заносим в массив все адреса с Листа "Адреса"
    b = 12: y = 2
    For Aa1 = 1 To 25
        If Worksheets("Адреса").Cells(b - 8, 1).Value = "a" Then
            y = y + x - 1
            For x = 1 To Worksheets("Адреса").Cells(b - 8, 3).Value
                For a1 = 1 To 9
                    arr1(y + x - 1, a1) = Worksheets("Адреса").Cells(a1 + b - 9, 2).Value
                Next a1
            Next x
        Else
        End If
        b = b + 12
    Next Aa1
    c = 5

    'впечатываем 11 адресов
    For Aa1 = 2 To 42 Step 10

        For a1 = 1 To 5
            For b = 1 To 9
                Worksheets("Печать").Cells(Aa1 + b - 1, a1).Value = arr1(c + a1 - 5, b)
            Next b
        Next a1
        c = c + 5
    Next Aa1

    Worksheets("Печать").Cells(1, 1).Activate

End Sub

Выгрузку вообще не трогал, только создание и цикл по массиву arr1()
Кстати, с стандартными кнопками могут быть проблемы, у меня например она не Buttons("Кнопка 2"), а Buttons("Button 2"), кроме того недавно вообще они файлы ломали... Это так, предупреждение.
И ещё - можно не ограничиваться 25-ю адресами - добавьте ещё один цикл и печать - напечатали первый лист, загрузили в него следующие и т.д.
Но лично мне ломать голову над этим неохота. Когда-то уже делал такое - поищите если интересно тут тему про наклейки или Labels с моим участием.
Изменено: Hugo - 31.12.2017 10:22:58
 
Цитата
oldy7 написал:
А зачем Вам столько квадратов одинаковых? Можно же распечатать выделенный диапазон столько раз, сколько Вам нужно.
Дело в том, что в конце недели нужно отправить некоторые акты по адресам. Иногда по одному адресу нужно заполнить 4 конверта, иногда 2, иногда 7 плюс к этому свой обратный на все конверты. Это выходить примерно 25 шт. В целях экономии и времени и бумаги и вырезания, я хочу сделать такой себе компоновщик адресов. К примеру выбрал из стандартных уже набранных адресов нужное количество, подогнал все адреса под количество - 25 и скомпоновал их на одном листе А4. Напечатал, разрезал и наклеял. Можно конечно и вручную печатать нужные диапазоны, но получается это же можно делать и в Ворде. Зачем, если можно хоть немножко но сэкономить время, и расходные материалы...
 
Цитата
Hugo написал:
Там нужен ещё один цикл - по количеству копий этих адресов. Уже делаю, но как-то пока туго...
Спасибо, буду очень благодарен. Я что-то никак не усеку как это организовать...
 
Добавил выше код. Если что :)
С Наступающим!
 
Цитата
Hugo написал:
Во, вроде так:
Супер! То, что нужно. Больше ничего и не нужно изобретать. Огромное спасибо.  
 
Забыл там в код добавить проверку на то, что у каждой галочки указано количество - ну отслеживайте мануально. Или добавьте сами.
P.S. Не, нормально - в ошибку не выпадает, просто не печатает  если нет количества. Можно ничего не менять.
Изменено: Hugo - 31.12.2017 10:43:49
Страницы: 1
Наверх