Ленька замучила... Прайс в Excel

Программирование на Visual Basic for Applications
MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Ленька замучила... Прайс в Excel

Сообщение MeMBus » 28.07.2005 (Чт) 8:59

Не ругайтесь сильно, если что-то подобное уже было... Заранее извиняюсь...
Вопрос №1. При добавлении значения узнать, начался ли новый печатный лист или нет. Соответственно если да, добавлять на новый печ. лист шапку, если нет то нет...
P.S. На работе жара, голова туго соображает, руки не набирают код...
P.P.S. Ширина ячейки плавающая, соотв. фиксированное кол-во строк на листе не подходит...
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.07.2005 (Чт) 9:18

Проще всего не изобретать велосипед, а воспользоваться фичей Excel в параметрах страницы "Сквозные строки". Другим путем -- только считать разрывы страницы.
Lasciate ogni speranza, voi ch'entrate.

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 28.07.2005 (Чт) 12:32

Ну млин, жара видимо действует... Хотел топик создать в VB, засунул в VBA... :? Сейчас смотрю в VB, топика нет – подумал, что меня уже плющит... Через поиск нашел... :)
Итак к сути проблемы... Есть VB, из него делаем прайс... Открываем док, и начинаем формировать таблицу, так как в этом случае считать разрывы? Мне ж нужно чтоб при достижении конца печ. листа был переход с переносом шапки... Тобишь можно как-нить извратиться и написать что-нить типа:

Код: Выделить всё
For i=1 to 5000
If новый лист then
‘Делаем шапку
else
.Range(“A” & trim(str(i))).Value = name

End if
Next i


P.S. Как-то же народ делает это...
Бороться и искать, найти и перепрятать!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 29.07.2005 (Пт) 11:24

alibek писал(а):Другим путем - только считать разрывы страницы.

А примерчик в студию? Если честно нашел таки код который подчитывает кол-во страниц, и диапозон ячеек на странице, но что-то он большеватый... да и честно я пока его сильно не смотрел, тока понял что реализация через колекцию...
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.07.2005 (Пт) 12:27

Пройтись циклом от текущей ячейки до первой и считать, сколько будет .PageBreak.
Lasciate ogni speranza, voi ch'entrate.

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 30.07.2005 (Сб) 8:43

Тут то я испытал проблемы... Для того чтоб узнать кол-во страниц к примеру, ты должен заполнить структуру документа, соотв. и поимеешь те самые разрывы... А не заполнив структуру, можно посчитать кол-во страниц, разрывы и т.п.? Ведь Excel это может делать, тобишь если мы не заполняем структуру, он все равно показывает страницы, и разделители... И соответственно он переформатирует документ, к примеру когда мы к примеру раздвигаем ячейку...
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.08.2005 (Пн) 8:04

В настройках можно задать автоматическую разметку страницы. Можно также выполнить предварительный просмотр, он тоже выполняет разметку страницы.
Lasciate ogni speranza, voi ch'entrate.

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 01.08.2005 (Пн) 8:51

alibek спасибо тебе за инфу... некоторые моменты выяснил... жара спала, решил таки попробовать всю накопившуюся инфу на примере... ну и соответственно задать еще ОЧЕНЬ много вопросов :)
Бороться и искать, найти и перепрятать!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 04.08.2005 (Чт) 13:41

Вопрос №2. Есть ячейка в которой находится текст. Необходимо сделать так, что бы в случае если текст в ячейку, она изменяла ширину (либо объединяла ячейки).
Внимание! Когда мы делаем это в эксэле, у нас помещается в строке 36 символов, но при превью отображается 40 символов, можно как-нибудь обойти данную фичу?
Шрифт не фиксированный, подсчет символов проходит, но если я оставляю 36 символов, то получается достаточно много свободного места в ячейке (относительно размера ячейки). Понимаю, что тут работает таки драйвер принтера...
2) Есть ли варианты подсчета количества строк не фиксированной длины?
При условии, что мы видим в окне экселя, то же и получаем при превью (печати).
Бороться и искать, найти и перепрятать!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.08.2005 (Чт) 14:34

36, 40...
Ты ещё масштаб отображения поизменяй, тебе многое откроется :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.08.2005 (Пт) 3:38

Во-во... Да я вчера и так уже подумал «А не пойти ли мне в монастырь в Тибет», когда начал всячески издеваться над превью... Так ведь и с ума сойти можно...
1) Есть ли варианты реализации «что видим, то и получаем»?
2) Есть ли варианты выполнить правильный перенос строки?
Бороться и искать, найти и перепрятать!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.08.2005 (Пт) 6:16

Как можно определить длину строки в пикселях изходя из установок принтера и используемого шрифта?
Бороться и искать, найти и перепрятать!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.08.2005 (Пт) 7:38

Дык у принтера есть hDC, поэтому GetTextExtentPoint32.
Правда, перед этим придётся установить принтеру тот самый шрифт, потом померять строку, потом воткнуть обратно :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.08.2005 (Пт) 8:08

Можно конечно использовать еще TextWidth... Думаю еще :?
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.08.2005 (Пт) 8:42

MeMBus писал(а):Можно конечно использовать еще TextWidth... Думаю еще :?

Неа, нельзя. В VBA нет объекта Printer.
Lasciate ogni speranza, voi ch'entrate.

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.08.2005 (Пт) 12:37

To alibek
Так я же говорил что хотел тему создать в разделе VB, а от жары создал в VBA. Соответственно, про TextWight знаю...

Вот сейчас сижу и придумываю как извратиться, чтоб получилось более-менее красивее... Я то думал, может кто нить решал такую проблему, и ему есть чем поделиться...
Бороться и искать, найти и перепрятать!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 02.09.2005 (Пт) 12:41

alibek нужен совет... добился быстрой работы с данными... но вот с форматированием что-то догнать не могу более оптимального решения... Есть, к примеру, 100 ячеек, нужно выполнить определенное форматирование стиля к ячейкам 1,5,7,11,15 и так далее, к ячейкам 3,9,13,17 и т.д. нужно выполнить другое форматирование и т.д. Как ускорить процесс форматирования?
Сейчас использую селекшен для выделения определенных групп ячеек, после чего применяю нужное форматирование к данному селекшину...
Бороться и искать, найти и перепрятать!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.09.2005 (Пт) 12:44

Делай несмежное выделение нескольких ячеек и применяй форматирование сразу к ним всем.
Lasciate ogni speranza, voi ch'entrate.

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.09.2005 (Пн) 4:10

Ты имеешь ввиду выделение всех ячеек (в группу), у которых будет одинаковый формат? Если да, то так и делаю... Если нет, то можно поподробнее что значит «несмежное»? Вот еще вопросец... К примеру в тех группах (см. выше) есть ячейки у которых определенное свойство одинаково (к примеру bold=true), но остальные свойства групп разные, какой вариант будет лучший, форматирование групп по font’у и далее форматирование каждой отдельной группы (выделение нужно перебивать на нужную группу) или форматирование каждых групп отдельно со своими свойствами?
Бороться и искать, найти и перепрятать!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 87

    TopList  
cron