Polundra_Pi
Гость
|
|
« : 12-09-2006 11:47 » |
|
Доброго воремени суток! Не знаю по адресу обращаюсь или нет, но рассчитываю на Вашу помощь, уважаемые учасники Форума. Постараюсь поянить в чём дело, тоесть для чего мне нужны подобные вещи. С одной иерархической БД (Лотус) в Эксель выводится отчёт для каждой выбраной организации На всех листа отчёта толжно писаться с 1-ой по 9-ю строчку почти одно и тоже, кроме строчки номер 4-ре. Свойство PrintTitleRows класса PageSetup очень полезная вещь, только мне его мешает использовать, то что Экселю не можно задать такую запись ActiveSheet.PageSetup.PrintTitleRows = "$1:$3;$5:$9", тоесть мне надо выводить на каждой странице все строчки с первой по девятую кроме четвёртой. В четвёртой строчке пишется некоторый отчётный параметр, точнее организация, выбранная из списка, отчёт строится циклом Фоал ... енд Фоал, причом перед каждым новым выполнением этого цыкла я указываю для разрыва страницы xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)). Но как определить произошол ли разрыв страницы сам по себе я , прощу прощения,так и не понял. Я хочу просто шапку тейблы копировать на каждую новую страницу и в строчку номер 4 вписывать скриптом нужную организацию. Поскажите как решить такую проблему?
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #1 : 13-09-2006 07:30 » |
|
может создать процедуру, которая и будет писать эти строки public sub CreateHeader(i as integer) xlSheet.Cells(i,1) = "sdfsddfs" xlSheet.Cells(i+1,1) = "sdfsddfs" xlSheet.Cells(i+3,1) = "sdfsddfs" xlSheet.Cells(i+5,1) = "sdfsddfs" end sub
public sub Main() For Each ... ... xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)) CreateHeader Next end sub
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #2 : 13-09-2006 09:19 » |
|
может создать процедуру, которая и будет писать эти строки public sub CreateHeader(i as integer) xlSheet.Cells(i,1) = "sdfsddfs" xlSheet.Cells(i+1,1) = "sdfsddfs" xlSheet.Cells(i+3,1) = "sdfsddfs" xlSheet.Cells(i+5,1) = "sdfsddfs" end sub
public sub Main() For Each ... ... xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)) CreateHeader Next end sub
Спасибо, что откликнулись! Ничего притив не имею, xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)) - разрыв выше указанной ячейки, процедура CreateHeader - выводит шапку таблицы, но мне надо определить, когда призошол разрыв страницы сам по себе, тоесть когда отчётная таблица перевалилась на новую страницу, а потом вствлять шапку отчётной тейблы после того как разрыв страницы имел место. Да, то что Вы предложили справедливо новая организация встравляется разрыв страницы, на которую выводится шапка с вписаной в нужном месте органмзацией. Но как же все-таки определить разрыв страницы сам по себе? Я планировал отчёт для каждой новой организации выводить на новом Экселевсом Листе, тогда в отчётном цыкле я укажу PrintTitleRows = "$1:9", и для каждой организации все должно быть как положено с шапкой, но как быть с нумерацией страниц отчёта, напр., на листе 3 последняя страница была 17, тогда на листе 4 первая должна быть 18 и тд. И как учитывать нумерацию, на удалённых листах, на которых вывелась одна только шапка, а данных нету их нумеровать не нужно.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 13-09-2006 09:37 » |
|
HPageBreaks - это коллекция пробегаешь по коллекции и соответсвенно нумеруешь страницы
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #4 : 13-09-2006 10:02 » |
|
HPageBreaks - это коллекция пробегаешь по коллекции и соответсвенно нумеруешь страницы
Если я Вас правильно понял, то в цикле по организациям после того как заполнена отчетная таблица для i-ой организации на i-ом Листе нужно вставить цикл типа For Each pb in Worksheets(i).HPageBreaks If pb.Extent = xlPageBreakFull Then Kolpage = Kolpage+ 1 End If Next А попом указать для свойства .FirstPageNumber = page0+Kolpage? А не можно ли последний номер страниц на текущем листе как-то определить с помощю кодов форматирования, задающих номера страниц, напр из этого Ен .CenterHeader = "Страница &P из &N", а потом для нового листа .FirstPageNumber=N+1, только наверное &N не выйдет в интеджер конвертнуть для прибавления , а потом в стринг?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 13-09-2006 11:36 » |
|
Polundra_Pi, ты предложил, ты и пробуй затрудняюсь сказать
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #6 : 13-09-2006 12:04 » |
|
Polundra_Pi, ты предложил, ты и пробуй затрудняюсь сказать Я-то пробую, только затрудняюсь получить конкретный результат ведь возле &P и &N мешает символ &. Попробую с pb.Extent = xlPageBreakFull . Если будут какие-то предлжения как вывести тейблу на одном Экселевсом Листе, без выведения новых организаций на новых листа, то я Вас охотно выслушаю, и есле Вы не притв ими поделиться Кстати, помимо этого интересно не видел такой инфы какой максимум Листов И по проще,сорри, как програмно послать на печать содержимое всех Листов сразу без цикла для печати по листам, одной коммандой.
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #7 : 13-09-2006 12:07 » |
|
может тогда использовать св-во xlSheet.HPageBreaks.Count тогда получим Public Sub Report() Dim iPage As Integer Dim xlSheet As Worksheet iPage = 1 For i = 1 To [Кол-во отчетов] 'добавляем новый лист для отчета xlSheet = Workbook.Worksheets.Add xlSheet.PageSetup.PrintTitleRows = "$1:9" xlSheet.PageSetup.FirstPageNumber = iPage ' Фомируем отчет ... ... ' выбираем номер страницы для следующего отчета iPage = xlSheet.HPageBreaks.Count + 1 Next i End Sub
|
|
« Последнее редактирование: 16-12-2007 17:31 от Алексей1153++ »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #8 : 13-09-2006 12:11 » |
|
И по проще,сорри, как програмно послать на печать содержимое всех Листов сразу без цикла для печати по листам, одной коммандой.
вероятно
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #9 : 13-09-2006 12:36 » |
|
Я счас протестирую, возможно что-то выйдет, если возникнут какие-то трудности и у Вас, уважаемые учасники Форума будет желание и свободная минутка, чтобы их разрешить, то я сообщу о них тут
|
|
|
Записан
|
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #10 : 13-09-2006 14:10 » |
|
Не хочу огорчать помагающих, но идея с iPage не работает, особо привело в удивление другое Напр., Задал начальное значение iPage=3, смотрю Параметры страниц первого Листа, да первая страница № 3, но на остальных почемуто № 1. Как-то странно прямо и удивительно, что может быть не так. А также почему-то у меня с Листа4 перескакиевает на Лист3 и начинает там выводить отчёт для организации №4. С вторым как-то может мжно разобраться, но разьясните как разрешить первый вопрос с нумерацией страниц на всех Листах
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #11 : 13-09-2006 14:31 » |
|
код в студию но не забывай worksheets массив или коллекция пробегаешь в цикле по всем листам устанавливаешь правильный iPage для каждого листа
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #12 : 14-09-2006 06:02 » |
|
код в студию но не забывай worksheets массив или коллекция пробегаешь в цикле по всем листам устанавливаешь правильный iPage для каждого листа
Нима проблем, там ничего особенного нету и код не составляет гостайну, так что я могу привести необходимые выдердки с кода, которые касаются проблемы последовательной нумерации страниц на всех Листах. Код с небольшими сокращениями некасающимися непосредственно нумерации и коментариями, чтобы ввести в то, что делается в целом. REM Вначале идёт описание и задание Лотусовских елементов, которые будут использованы при построении отчёта Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Dim doc As NotesDocument Dim wos As New NotesUIWorkspace Dim uidoc As notesuidocument Set uidoc=wos.currentdocument Call uidoc.Refresh 'Обновление всех полей текущего дока перед отчётоформированием Dim column As NotesViewColumn Torg=uidoc.document.orgs(0) If Torg="" Then Exit Sub BOX=uidoc.document.GetItemValue("orgs") 'Список организаций выбранных юзером, по которым строят отчёт. Set view = db.GetView( "Osobisti" ) 'Название вида в котором хранится доки, с которых циклом Вайл ... Енд Вайл выбираются отчётные данные REM Дальше идет определение значений констант Экселя, в соответствии со справкой по ВБА, которые использовались в дальнейшем. ..... REM Дальше иницилизируем Эксель для работы с ним через Лотус Нотес. Set EWindow = CreateObject("Excel.Application") If EWindow Is Nothing Then message$ = "Ошибка при запуске Excel." & Chr$( 10 ) & _ "Может он у Вас не инсталлирован." Msgbox message$, 16, "Excel не запускается" Exit Sub End If EWindow.Caption="ПЕРЕЧЕНЬ ПО ОРГАНИЗАЦИЯМ" 'Заголовок Эксель-окна Set WorkBooks=EWindow.Workbooks WorkBooks.Add sh=1 'Number WorkSheet page0=uidoc.document.pagenumber(0) %REM Поле в текущем документе, куда юзер вводит начальный номер страницы, номер нимоно хранить где-то из-за того, что есть такие отчёты которые нужно составлять от руки, а нумерация у печатных и отчётов заполненных руками должа быть одинаковой %END REM Forall TipOrg In BOX 'Цикл по выбранным организациям из поля orgs. Если не ошибаюсь аналог цикла For Each ... Next If ( sh>3 ) Then 'Добавляем новый Лист новый, когда sh>3, ведь три Листа уже есть Call ws.Select EWindow.Sheets.Add End If Set ws=EWindow.Workbooks(1).Worksheets(sh) With EWindow.Workbooks(1).Worksheets(sh).PageSetup .Orientation = xlLandscape .FirstPageNumber = page0 ..... ' и тд End With Call ws.Activate EWindow.visible=True 'Делать Эксель видимым юзерю при отчётопостроении 'Дальше идет заполнение шапки таблицы ...... 'Потом заполнение самой отчётной тейблы цыклом Вайл ... Енд Вайл m=12 'Строка с которой начинается отчётозаполнение Set doc=view.GetFirstDocument While Not ( doc Is Nothing) 'цикл непосредственного заполнения тейблы данными при определённых условиях, указанныю юзером, пробегается по всем документам представления виев If .... End If Set doc = view.GetNextDocument(doc) Wend 'Оформляем тейблу (проводим линии, звадаем шрифты, словом делаем форматирование всей тейблы) sh=sh+1 'Новое выполнение цикла новый номер Листа page0=ws.HPageBreaks.Count+1 'Вот собственно то, что было предложено Помагающим End Forall EWindow.visible=True Call ws.Cells(1,1).Select End Sub Если будут какие-то предложения, замечания, то, по возможномти, сообщите
|
|
« Последнее редактирование: 16-12-2007 17:32 от Алексей1153++ »
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #13 : 14-09-2006 06:15 » |
|
page0=ws.HPageBreaks.Count+1 'Вот собственно то, что было предложено Помагающим а если хорошенько подумать и заменить на page0=ws.HPageBreaks.Count+page0 вот мой тестовый макрос Public Sub Report() Dim iPage As Integer Dim xlSheet As Worksheet iPage = 1 For i = 1 To 3 'добавляем новый лист для отчета Set xlSheet = ThisWorkbook.Worksheets.Add xlSheet.PageSetup.PrintTitleRows = "$1:1" xlSheet.PageSetup.FirstPageNumber = iPage xlSheet.PageSetup.CenterFooter = "Страница &P из &N" ' Фомируем отчет xlSheet.Cells(1, 1) = "Шапка отчета" For j = 1 To 5 - i xlSheet.Cells(j * 2, 1) = "Какой-то текст листа " & Str(i) xlSheet.HPageBreaks.Add (xlSheet.Cells(j * 2 + 1, 1)) Next ' выбираем номер страницы для следующего отчета iPage = iPage + xlSheet.HPageBreaks.Count Next i ' xlSheet.PrintOut ' ThisWorkbook.PrintOut End Sub только надо колонтилул поменять, а то пишет 8 страница из 2
|
|
« Последнее редактирование: 16-12-2007 17:33 от Алексей1153++ »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #14 : 14-09-2006 06:27 » |
|
дополнения If ( sh>3 ) Then 'Добавляем новый Лист новый, когда sh>3, ведь три Листа уже есть Call ws.Select EWindow.Sheets.Add End If не факт, у меня, к примеру, только 1 лист. Может лучше пробежаться в начале по всем листам и удалить их, а потом честно добавлять set ws=EWindow.Sheets.Add With EWindow.Workbooks(1).Worksheets(sh).PageSetup .Orientation = xlLandscape .FirstPageNumber = page0 ..... ' и тд End With заменить на With ws.PageSetup .Orientation = xlLandscape .FirstPageNumber = page0 ..... ' и тд End With
вообще не использовать конструкцию EWindow.Workbooks(1).Worksheets(sh) раз получили объект листа set ws=EWindow.Sheets.Add то и работать с ним раз получили объект книги Set WrkBk=EWindow.Workbooks.Add то и работать с ним и тогда будет меньше возникать ошибок типа А также почему-то у меня с Листа4 перескакиевает на Лист3 и начинает там выводить отчёт для организации №4. ЗЫЖ ИМХО
|
|
« Последнее редактирование: 16-12-2007 17:33 от Алексей1153++ »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #15 : 14-09-2006 07:03 » |
|
Спасибо!, за то, что как говорится на связи Пробовал и так, но не помогло вывело на все страницах FirstPageNumber тот, который затал перед циклом Фоал, тоесть напр, page0=3, и на всех Листах первый номер равен трём. Может таким образом считается, а именно iPage = iPage + xlSheet.HPageBreaks.Count производится подсчёт полько тех разрывов страниц, а не всех , что установились програмно xlSheet.HPageBreaks.Add (xlSheet.Cells(j * 2 + 1, 1))? А с Листами счас сделаю, как Вы посоветовали
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #16 : 14-09-2006 08:11 » |
|
iPage = iPage + xlSheet.HPageBreaks.Count
насколько я понял считает кол-во всех разрывов
page0 = page0 + ws.HPageBreaks.Count
на этой строке поставьте бреакпоинт и проверяйте изменяется ли page0
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #17 : 14-09-2006 09:18 » |
|
С листами сделал как Вы рекомендовали, определик ексель-книгу перед цикло Фоал Set WrkBk=EWindow.Workbooks.Add и в самом цикле поставив Set ws=WrkBk.Sheets.Add. Как удалить все Листи, ну перед циклом естественно, чтобы только один остался. Я записал так ForAll WkSt In WrkBk.Sheets Call WkSt.Select EWindow.ActiveWindow.SelectedSheets.Delete End ForAll Но понятное дело отладчик прервал выполнение скрипта Лотуса, когда Эксель выдал сообщение, что в книге обязательно должна быть хотя бы одна книга, которую удалить не можно. Я пробовал написать так ForAll WkSt In WrkBk.Sheets If (WkSt<>WrkBk.Sheets(1)) Then Call WkSt.Select EWindow.ActiveWindow.SelectedSheets.Delete End If End ForAll Но отладчику не понравилась запись в строке с (WkSt<>WrkBk.Sheets(1)), он выдает ошибку Тайп мисматч, несоответствие типов тоесть. А насчёт page0. Мои сомнения вроде подтвердились ws.HPageBreaks.Count задаёт количество разрывов заданых програмно ws.HPageBreaks.Add (ws.Cells(i+1, j)). Поставил в цикле Вайл.. Енд Вайл такую строку.Смотрю на первом заполненном Эксель-листе шесть страниц вышло, а на втором заполненном листе FirstPageNumbe=6 и на нем одна страница, на втором FirstPageNumbe=6 тоже. Тоесть если произошел один разрыв, то страниц две есть, тоесть iPage = iPage + xlSheet.HPageBreaks.Count+1, но на второй странице может и не быть данных, правда, я вроде зашол в заблуждение. Наверное нужно другое свойство HPageBreaks или вобще другой метод применять. Может можно все-таки програмно определить, что произошол разрыв странице са по себе, тоесть, что достигнут конец страницы, тогда я смогу выводить отчёт для разных организаций на одном Листе, или если на разных, то как их последовательно пронумеровать страницы?
|
|
|
Записан
|
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #18 : 14-09-2006 10:18 » |
|
Счас буду испробовать For Each pb in ws.HPageBreaks If pb.Extent = xlPageBreakFull Then Kolpage = Kolpage+ 1 End If Next Только кроме full-screen page breaks есть еще и print-area page breaks, а они могут совпадать. Есть у кого-то не пропала охота мне помочь, то, если есть вободная минутка и желание помочь, то помогите, пожалуйста
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #19 : 14-09-2006 10:22 » |
|
тута проверил если использовать метод Workbook.PrintOut, то он сам нормально проставляет номера страниц и тогда не надо самому выставлять начальную страницу, т.е в вот этом надобность отпадает
.FirstPageNumber = page0 iPage = iPage + xlSheet.HPageBreaks.Count+1
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #20 : 14-09-2006 10:56 » |
|
тута проверил если использовать метод Workbook.PrintOut, то он сам нормально проставляет номера страниц и тогда не надо самому выставлять начальную страницу, т.е в вот этом надобность отпадает
.FirstPageNumber = page0 iPage = iPage + xlSheet.HPageBreaks.Count+1
Тоесть надо будет только указать FirstPageNumber только для самого первого Листа, а потом все страницы, которые будут находиться на Втором Листах, будут начинаться с немер n+1, если номер последней странице на Первом Листе был n? Еще интересно такое можно как-то специфицески настроить Эксель может быть через конфигурационные файлы, чтобы выводилось не три и не четыре, а напр, с 25 Листов. Кстати, нашол неплохой линк, может Вам пригодится, мне очень и очень пригодился, там про русский коды форматирования для Экселя, ну напр., если к русскоязычному Экселю обращаться с другого приложения, то вместо ws.PageSetup..RightHeader ="&P" надо писать ws.PageSetup..RightHeader ="&С" http://www.delphikingdom.com/asp/viewitem.asp?catalogid=920Только у меня напр., &С+число не работает
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #21 : 14-09-2006 12:05 » |
|
Тоесть надо будет только указать FirstPageNumber только для самого первого Листа, да перед печатью задайте такие команды Set ws = ThisWorkbook.Worksheets(1) ws.PageSetup.FirstPageNumber = 3 wb.PrintOut
и остальные будут по порядку Еще интересно такое можно как-то специфицески настроить Эксель может быть через конфигурационные файлы, чтобы выводилось не три и не четыре, а напр, с 25 Листов. а это не понял
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #22 : 14-09-2006 12:31 » |
|
Я имел ввиду, чтобы есле создать пустой эксель-файл, то чтобы в нем присутствовали по умолчанию Литст1, Лист2, ...., и тд до Лист25, ведь нареное как-то можно так сделать, просто поинтересовался. О, и еще Эксель добавляет Листы как-то вроде неправильно. Ну напр., Если Стать на Лист3 и Добавить Лист4, то он будет стоять не после Листа3, а перед ним. А также неясно почему, когда удалить все Листы (было их скажем 6 штук), за исключением одного какого-то, напр., Лита1, а потом добавить, то появится не Лист2, а Лист7. Эксель получается где-то хранит имена даже удалённых Листов?
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #23 : 14-09-2006 13:06 » |
|
Я имел ввиду, чтобы есле создать пустой эксель-файл, то чтобы в нем присутствовали по умолчанию Литст1, Лист2, ...., и тд до Лист25, ведь нареное как-то можно так сделать, просто поинтересовался. Сервис-Параметры вкладка Общие-Листов в новой книге (но возможно в других версиях Ёкселя этого нет, у меня ХР) О, и еще Эксель добавляет Листы как-то вроде неправильно. Ну напр., Если Стать на Лист3 и Добавить Лист4, то он будет стоять не после Листа3, а перед ним. А также неясно почему, когда удалить все Листы (было их скажем 6 штук), за исключением одного какого-то, напр., Лита1, а потом добавить, то появится не Лист2, а Лист7. Эксель получается где-то хранит имена даже удалённых Листов? скорее хранит не имена листов а некий счетчик, который добавляется к имени листа ЗЫЖ я всегда листы переименовываю
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #24 : 14-09-2006 13:40 » |
|
Нашол вкладку есть такая, у меня тоже Excel XP, если это Excel 2002 имеется ввиду. Также наверное использование обращения к Листам по имени будет понадёжней чем по индексу, напр, так Call wb.Sheets("Организация7").Select, чем такое Call EWindow.ThisWorkbook.Worksheets(7) есле организация7 находится на седьмом Листе соответственно?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #25 : 14-09-2006 14:28 » |
|
у sheets есть свойство name организация7 может не обязательно находится на 7 листе
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #26 : 15-09-2006 05:57 » |
|
Доброго времени суток, уважаемые учасники Форума! Звиняйте, что надоедаю, но помогите разобраться до конца. Мне нужно удалять те листы, которые не содержат данных для организации, тоесть только шапку одну. Для этого я проверяю в конце цикла Фоал заполненная ли первая ячейка А10 отчёта, в которой если есть данные, то они должны обязательно быть. If (ws.Cells(10, 1).Value="") Then Call ws.Select EWindow.ActiveWindow.SelectedSheets.Delete End If
Но перед удалением Эксель выдает сообщение о том, что Лист может содержать данные, если хотите его удалить, то нажлите Удалить. Можно ли делать как-то сделать, чтобы подобное сообщение не выскакивало, а то юзеря не любят когда много раз надо кнопки нажимать . Так же почему-то когда передаю данные с Лотуса Нотеса в Эксель, то выдаётся сообщение типа ОЛЕ Автомейшен обджект еррор на строке Set ws = EWindow.ThisWorkbook.Worksheets(1). Смотрел в хелпе все вроде так ThisWorkbook Member of Excel.Application, ну а EWindow как положено и было задано Set EWindow = CreateObject("Excel.Application"). Но свойсва Worksheets у ThisWorkbook я не нашол, я б записал просто ws.PageSetup.FirstPageNumber = page0, но у меня может быть такое, именно этот Лист ws будет удалёт из Книги в последнем выполнении цикла? Метод wb.PrintOut протестить возможность не подвернулась, сетевой принтер счас отключен временно, но вреча он работал, хоть бумаги не было. Значит я пустил на печать , а потом отменил для даной книги печать, смотрю просмотр перед печатью, на Первом Листе стоит Первый Номер страниты 3(пейдж0), а на других Листах Авто, смтрю в просморт, а там Первые Страницы с одного начинают для других листов, тоесть этот метод проставлет намера для станиц на других Листах последовательно, только при печати, что тоже неплохо?
|
|
« Последнее редактирование: 15-09-2006 07:02 от Polundra_Pi »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #27 : 15-09-2006 07:12 » |
|
This example deletes Sheet3 in the active workbook without displaying the confirmation dialog box.
Application.DisplayAlerts = False Worksheets("Sheet3").Delete Application.DisplayAlerts = True
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Polundra_Pi
Гость
|
|
« Ответ #28 : 15-09-2006 08:29 » |
|
Спасибо! Так помогло If (ws.Cells(10, 1).Value="") Then Call ws.Select EWindow.DisplayAlerts = False EWindow.ActiveWindow.SelectedSheets.Delete EWindow.DisplayAlerts = True End If А метод wb.PrintOut так еще и не пртотестил. Но ничего думаю еще за текущущий день испробую. Возник вопрос по поводу так называемых "мертвых зон печати", тоесть максимальных значений полей печати, меньше которых значения установить не моно. Так, напр., для одного принтера левое и правое поле по 0,6 см максимум для книжной ориентации, а для другогого прнтера левое 0,4 см, а правое только 1,2 и см и дальше не двигается, тоесть 1 см установить не моно. Эксель как видно учитывает эти "мёртвые зоны печати". Интересует можно ли их как-то определить для каждого принтера значения этих самых "мертвых зон печати", возможно даже через средства ВБА, а потом ствить некоторым полям, напр., теже левым и правым. максилальные значения для текущего принтера.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #29 : 15-09-2006 11:10 » |
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|