Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помощь VBA в экселе  (Прочитано 13399 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Владимир
Гость
« : 29-07-2007 10:50 » 

Вот эта штука, в экселе при нажатии кнопки принт , после проверки не пусты ли ячейки должна их напечатаь а потом стереть содержимое, все это происходит, только сначала стирается а потом печатается а требуется наоборот, сначала напечатать а потом стереть

Private Sub WorkBook_BeforePrint(Cancel As Boolean)
    ' Тут лежит список ячеек для проверки
    Let Line = "Камаз_совок!C3:C12"
    Let Line_clr = "Камаз_совок!C3:C12"
    Let cur_pos = 1
    Let prev_pos = 1
    Line = Line + ";"
    Line_clr = Line_clr + ";"
 
    ' Пока не проверим все ячейки
    While 1
        ' Добываем следующий кусок
        cur_pos = InStr(prev_pos, Line, ";")
        If cur_pos = 0 Then GoTo finish_search
        Let ret = Mid(Line, prev_pos, cur_pos - prev_pos)
        prev_pos = cur_pos + 1
       
        ' Это текущая страница?
        Let truth = False
        Let lst = Mid(ret, 1, InStr(1, ret, "!") - 1)
        For Each sh In Windows(1).SelectedSheets
            If sh.Name = lst Then
                truth = True
                Exit For
            End If
        Next
        If truth Then
            ' Проверяем каждую ячейку в куске
            For Each c In Range(ret)
                c.Interior.Color = RGB(255, 210, 210)
               
                If Len(c.Text) <= 0 Then
                    ' Устанавливаем цвет
                    c.Interior.Color = RGB(255, 100, 200)
               
                    ' Активируем ячейку (иногда вылетает)
                    c.Worksheet.Activate
                    c.Activate
                    Cancel = True
                End If
            Next c
        End If
    Wend

finish_search:
    If Cancel = False Then
        GoTo normal_exit
    Else
        GoTo abnormal_exit
    End If

abnormal_exit:
    MsgBox ("Ячейка не заполнена")
    Cancel = True
    Exit Sub
'
normal_exit:
    ' Пока не проверим все ячейки
    cur_pos = 1
    prev_pos = 1
    While 1
        ' Добываем следующий кусок
        cur_pos = InStr(prev_pos, Line_clr, ";")
        If cur_pos = 0 Then GoTo absolut_exit_lol
        Let ret = Mid(Line_clr, prev_pos, cur_pos - prev_pos)
        prev_pos = cur_pos + 1

        ' Это текущая страница?
        Let truth = False
        Let lst = Mid(ret, 1, InStr(1, ret, "!") - 1)
        For Each sh In Windows(1).SelectedSheets
            If sh.Name = lst Then
                truth = True
                Exit For
            End If
        Next
        If truth Then
            ' Проверяем каждую ячейку в куске
            For Each c In Range(ret)
                Let a = c.ClearContents()
                'c.Interior.Color = RGB(0, 255, 0)
            Next c
        End If
    Wend
absolut_exit_lol:

End Sub


« Последнее редактирование: 29-07-2007 10:54 от Владимир » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 30-07-2007 05:56 » 

WorkBook_BeforePrint - выполнить до печати
а такое WorkBook_AfterPrint существует?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Владимир
Гость
« Ответ #2 : 30-07-2007 07:20 » 

Заменил Before на After оно просто только печатает и ничего больше вообще не делает
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-07-2007 07:48 » 


до печати - готовишь страницу
после печати - очищаешь

я так думаю....
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Владимир
Гость
« Ответ #4 : 30-07-2007 08:30 » 

А после печати событие заканчивается по "End Sub" и дальше хоть что пиши оно не работает
Записан
Владимир
Гость
« Ответ #5 : 30-07-2007 09:01 » 

Точнее не так, событие нажатия кнопки принт порождает инициализацию исполнения данного скрипта, после исполнения скрипта происходит выход из него и после этого печать и дальше хоть что пиши оно не работает
« Последнее редактирование: 30-07-2007 09:26 от Владимир » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 31-07-2007 05:35 » 

сделайте свою кнопку для печаи и там вызывайте метод ThisWorkbook.PrintOut

Записан

I Have Nine Lives You Have One Only
THINK!
Владимир
Гость
« Ответ #7 : 31-07-2007 11:58 » 

сделайте свою кнопку для печаи и там вызывайте метод ThisWorkbook.PrintOut


Надо именно по кнопке принт, поскольку на других компах придётся тоже создавать свою кнопку.
Мне не нужен способ обхода, мне нужна реализация именно таким образом, через кнопку принт, что бы это работало везде без предварительного создания дополнительных кнопок
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #8 : 02-08-2007 12:57 » 

ну тогда ничем не могу Вам помочь

отловить событие "конец печати" не могу

Есть предложение делать так:
1) Befor_Print - форматирование перед печатью
2) Удалять данные после печати по кнопке, а ее можно создавать при открытии книги

другой возможности пока не вижу
Записан

I Have Nine Lives You Have One Only
THINK!
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 02-08-2007 13:05 » 

можно, например кнопку "рисовать" при открытии книги
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Владимир
Гость
« Ответ #10 : 04-08-2007 18:14 » 

Да нет, это всё пляски с бубном, так у меня есть, надо именно без чудес, нажал на кнопку принт либо выбрал в меню печать и процес пошёл
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #11 : 08-08-2007 05:17 » 

Да нет, это всё пляски с бубном, так у меня есть, надо именно без чудес, нажал на кнопку принт либо выбрал в меню печать и процес пошёл
ну по другогму нельзя.
т.е до печати можно выполнить свои действия (Befor_Print), а вот отследить окончание печати (если запускаете печать не кодом) уже нельзя и поэтому создайте кнопку и по ней делайте те действия, которые нужно делать после печати

можно конечно заменить пункт меню "печать", но тогда могут возникнуть проблемы с печатью других книг
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines