Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2009, 01:29   #11
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Давайте хоть теперь четко разберемся с постановкой задачи
1) Как понимать?
Цитата:
В первой книге есть какое то количество Листов (Sheets) (как во второй "1", "2", "3")
Их в первой книге тоже 3!? или нет?
2) При печати надо печатать только активный лист из первой книги или все листы в первой книге (соответственно и обороты к ним)?
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума Ответить с цитированием
Старый 27.01.2009, 07:55   #12
TRN09
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 11
По умолчанию

Каждый раз в первой книге - разное количество Листов (sheets). Весь текст кождого Листа (Sheet-a) помещается на одной стороне стандартного листа А4.
Вторая Книга содержит 3 стандартных Листа (Sheet-a), текст которых тоже помещается на одну сторону стандартного листа А4.
Планируется к каждому листу (sheet-у) из первой книги на второй стороне листа А4 автоматически печатать соответствующий текст из второй Книги.
TRN09 вне форума Ответить с цитированием
Старый 27.01.2009, 12:02   #13
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Цитата:
При печати надо печатать только активный лист из первой книги или все листы в первой книге
Вопрос так и остался открытым
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума Ответить с цитированием
Старый 27.01.2009, 12:13   #14
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Если надо распечатать все листы из первой книги, то вставьте в книгу такой макрос и запускайте его (Печать):
Код:
Sub Печать()
Dim L$, sht As Worksheet
    For Each sht In ThisWorkbook.Sheets
        sht.PrintOut
        L = sht.Range("A1").Value
        Select Case L
            Case "А"
                Workbooks("Второй.xls").Sheets("1").PrintOut
            Case "Б"
                Workbooks("Второй.xls").Sheets("2").PrintOut
            Case "В"
                Workbooks("Второй.xls").Sheets("3").PrintOut
        End Select
    Next sht
End Sub
Вложения
Тип файла: zip pack.zip (19.0 Кб, 11 просмотров)
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума Ответить с цитированием
Старый 27.01.2009, 12:59   #15
TRN09
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от cent Посмотреть сообщение
Вопрос так и остался открытым
Печатать надо все Лист-ы из первой книги начиная с третьего.
TRN09 вне форума Ответить с цитированием
Старый 27.01.2009, 13:03   #16
TRN09
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 11
По умолчанию

[QUOTE=cent;193882]Если надо распечатать все листы из первой книги, то вставьте в книгу такой макрос и запускайте его (Печать):
[CODE]Sub Печать()

Всё работает. Спасибо. =)
Но почему то страницы из второй книги печатаются на отдельных листах.
Ещё мне подсказали вот такой подход:
Sub Кнопка1_Щелчок()
Dim mess As String 'Объявляем переменную для вывода ошибок
Select Case Range("A1").Value 'Проверяем значение В ячейке А1
Case "А" 'Если оно равно А выделяем лист 1 и лист 2 и печатаем на активный принтер 1 копию
Sheets(Array("Лист1", "2")).Select
ActiveWindow.SelectedSheets.PrintOu t Copies:=1
Case "Б" 'Тоже для выбора с Б
Sheets(Array("Лист1", "3")).Select
ActiveWindow.SelectedSheets.PrintOu t Copies:=1
Case "В" 'Тоже для выбора с В
Sheets(Array("Лист1", "4")).Select
ActiveWindow.SelectedSheets.PrintOu t Copies:=1
Case Else 'Если в ячейке както другое значение то выводим информацию об ошибке
mess = MsgBox("Value not Selecting", vbCritical + vbOKOnly, "Info about printing")
End Select
Sheets("Лист1").Select 'Обязательно снимаем выделение. Если этого не сделать, то при работе с группой возможны очень неприятные последствия, как то: редактирование значения в ячейке А1 в группе листов приводит к редактированию на всех листах.
End Sub

Но он работает только в пределах одной книги. Можно ли как нибудь объединить эти 2 метода?
TRN09 вне форума Ответить с цитированием
Старый 27.01.2009, 13:39   #17
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Исходя из вашего кода получилось нечто такое
Код:
Sub Печать()
Dim L$, sht As Worksheet
    For Each sht In ThisWorkbook.Sheets
        L = sht.Range("A1").Value
        Select Case L
            Case "А"
                Sheets(Array(sht, Workbooks("Второй.xls").Sheets("1"))).Select     ' Ошибка "Type mismatch"
                ActiveWindow.SelectedSheets.PrintOut Copies:=1
            Case "Б"
                Sheets(Array(sht, Workbooks("Второй.xls").Sheets("2"))).Select     ' Ошибка "Type mismatch"
                ActiveWindow.SelectedSheets.PrintOut Copies:=1
            Case "В"
                Sheets(Array(sht, Workbooks("Второй.xls").Sheets("3"))).Select     ' Ошибка "Type mismatch"
                ActiveWindow.SelectedSheets.PrintOut Copies:=1
        End Select
    Next sht
End Sub
но выдает ошибку.... даже не знаю, может нельзя выделить массив листов.... или в чем еще может быть загвоздка
видимо нужна помощь зала
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах

Последний раз редактировалось cent; 27.01.2009 в 13:57.
cent вне форума Ответить с цитированием
Старый 28.01.2009, 08:07   #18
TRN09
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 11
По умолчанию

Из разных Книг видимо выделить массив листов неудасться.
А как можно модернизировать его (макрос), что бы в начале макроса он (макрос) копировал три Листа из второй Книги в Первую, после чего распечатал бы листы (на которых в ячейке А1 стоит значение "А", "Б" или "В") с соответствующими Листами уже из Книги1 (скопированными из Книги2 в начале макроса), после чего удалил бы скопированные Листы?
Получилось немного пуанно... но очень надеюсь на вашу помощь.
TRN09 вне форума Ответить с цитированием
Старый 28.01.2009, 10:49   #19
TRN09
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 11
По умолчанию

Вот в таком варианте всё работает как надо - печатаются нужные листы на 2-х сторонах... =)
Но это всё работает если известны имена и количество листов, которые необходимо напечатать.
Подскажите как реализовать то же самое при неизвестном количестве Листов и их Именах (что бы он сам перебирал все Листы)
Вложения
Тип файла: zip PACK.zip (22.1 Кб, 11 просмотров)
TRN09 вне форума Ответить с цитированием
Старый 30.01.2009, 15:39   #20
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Вот окончательный вариант
Код:
Sub Печать()
    Dim L$, sht As Worksheet
    Application.ScreenUpdating = False
    Workbooks("Второй.xls").Activate
    Sheets(Array("1", "2", "3")).Copy before:=Workbooks("Первый.xls").Sheets(1)

    For Each sht In ThisWorkbook.Sheets
        If sht.Name <> "1" And sht.Name <> "2" And sht.Name <> "3" Then
            L = sht.Range("A1").Value
            Select Case L
                Case "А"
                    Sheets(Array(sht.Name, "1")).PrintOut Copies:=1
                Case "Б"
                    Sheets(Array(sht.Name, "2")).PrintOut Copies:=1
                Case "В"
                    Sheets(Array(sht.Name, "3")).PrintOut Copies:=1
            End Select
        End If
    Next sht

    Application.DisplayAlerts = False
    Sheets(Array("1", "2", "3")).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Вложения
Тип файла: zip pack.zip (20.5 Кб, 18 просмотров)
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перехват отправления чужими программами отправки на печать документов Nat Win Api 7 20.04.2007 16:07
Нужна помощь LeoN Общие вопросы Delphi 12 18.03.2007 07:58
Нужна помощь! mEka Помощь студентам 2 04.03.2007 01:39