IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Visual Basic или макрос в Excel (http://www.imho.ws/showthread.php?t=142867)

Tigrenakat 01.02.2010 19:09

Visual Basic или макрос в Excel
 
Помогите пожалуйста создать макрос для таблицы в Excel.
Необходимо раскадрировать пленку, при определенных условиях. В поле 1-го кадра может располагаться 16, 8, 4, 2 или 1 документ. Следовательно, выделяя диапазон ячеек таблицы нужно указать сколько документов помещать в кадр и с какого номера кадра начинать расчет.
Должно получиться как то так, например:
Ген.план - 4(листа) - (№кадра /№ позиции в кадре) 15/1 - 16/2.
Значит задано условие, что в поле кадра 2 документа, и начинается с 15 кадра.

EvroStandart 02.02.2010 10:14

Нужен пример таблицы и результата (что должно получиться).
Так непонятно.

Tigrenakat 03.02.2010 18:27

К сожалению у меня не получается загрузить файл таблицы Excel, пишет некорректный документ.. :(

добавлено через 6 минут
"Привет" Таллинну....:) когда то я там жила....Хороший город...

Nerey_ser 03.02.2010 21:59

Стоит попробовать запаковать в архив :)

Tigrenakat 03.02.2010 23:02

Вложений: 1
Вложение 68304 Вот небольшой фрагмент таблицы...

Alex Dark 04.02.2010 06:25

Tigrenakat, попробуй представить себе что ты ни чего не знаешь (например как я) о том что значит "раскадрировать пленку, при определенных условиях".
А теперь попробуй понять из примера и из того что ты написала что надо сделать?
Я вот ни чего не понял.
Ни просто разглядывая таблицу, ни просто читая словесное описание проблемы. А совместив и то и другое - не заметил явной взаимосвязи.

Tigrenakat 04.02.2010 08:01

Представь себе старый фотоаппарат, с катушечной пленкой. Обычно в одном поле кадра располагается одна фотография и так , 36 кадров.
В моем случае пленка 30 метров и в одном поле кадра может располагаться не только одно изображение, а 2,4,8,16. Эти цифры и есть условия. Вот мне и надо в таблице присвоить каждому изображению свое место, т.е.номер кадра и позицую в кадре. А так как условия постоянно меняются (это зависит от размеров изображений), мне надо, чтобы макрос работал по выделеному мной диапозону. В этом выделенном диапозоне он просчитал изначально сумму чертежей, потом запросил на какое число разделить (1,2,4,8,16) и с какого номера начать....(например с10-го) . А так как в одном кадре может быть например 2 изображения, для этого и нужна позиция в кадре. Т.е. 10/1, 10/2.
Вот как то так... Надеюсь, что теперь стало попонятнее...

EvroStandart 04.02.2010 11:47

В таблице я ничего кроме позиции в кадре ненашёл.
Что с этой цифрой делать - тайна покрытая мраком.


Цитата:

Сообщение от Tigrenakat (Сообщение 1697022)
не только одно изображение, а 2,4,8,16. Эти цифры и есть условия.

Условий в таблице ненашёл.


Цитата:

Сообщение от Tigrenakat (Сообщение 1697022)
Вот мне и надо в таблице присвоить каждому изображению свое место, т.е.номер кадра и позицую в кадре.

Этот столбец в таблице уже заполнен. Непонятно каким образом получаются результаты типа "27/2 - 27/8"


Цитата:

Сообщение от Tigrenakat (Сообщение 1697022)
В этом выделенном диапозоне он просчитал изначально сумму чертежей

Что есть сумма чертежей и как её считать?


ЗЫ!
По такому объяснению чтото сделать невозможно в принцыпе. Нужно расписывать ближе к математике. На пример, брать цыфру из ячейки А1, умножить на В1 и от результата отнять С1. А потом всё это разделить на запрошеное число.

BorLase 04.02.2010 12:02

Tigrenakat, правильно ли будет сказать так?

Код:

Допустим, у нас есть три документа:
- План (4 листа, располагать 1 лист на кадр)
- Договор (6 листов, располагать 2 листа на кадр)
- Фото (10 штук, располагать 4 фото на кадр)

И нужно все это расположить, начиная с 10-го кадра.

В итоге имеем:
План = 10/1 - 13/1
Договор = 14/1 - 16/2
Фото = 17/1 - 19/2


Tigrenakat 04.02.2010 23:04

совершенно верно...именно так...
В таблице все заполнено в ручную без формул.., поэтому мне и нужен макрос...или программка которая бы цепляла Excel табл. Но она должна работать именно по выделенной области, которую я буду задавать, в этой области просчитывать количество документов и запрашивать на какую цифру разделить (1,2,4,8,16) а далее присваивать номер и позицию в кадре, опять же с запросом с какого номера начинать..
Я раньше занималась программированием , но это было давно и программы писала к станкам с числовым программным управлением.И уже если честно подзабыла....
Я представляю алгоритм, но не могу прописать команды....
Если вы поняли мою просьбу и могли бы мне помочь...я была бы вам очень признательна.... Помогите мне пожалуйста!!!!

BorLase 04.02.2010 23:45

насчет VB точно не помогу (никогда на нем не писал), но формулу набросать можно попробовать...

последний вопрос: если в кадре есть пустые места - их обязательно заполнять или можно все равно заполнять с нового кадра?

т.е., допустим, у нас есть 2 листа по 1/4 кадра; и 2 листа по 1/2 кадра

так вот - первый кадр должен быть заполнено полностью или можно его оставить полупустым?

Alex Dark 05.02.2010 06:55

Цитата:

Сообщение от Tigrenakat (Сообщение 1697137)
Я представляю алгоритм, но не могу прописать команды....

Tigrenakat, ну так напиши один алгоритм на примере небольшого диапазона подробно, и 2-3 примера кратко, для проверки.
А главное, в первом примере, не забудь указать откуда и что берешь и куда записываешь результат.
И будет тебе счастье :)

Tigrenakat 05.02.2010 11:40

На самом деле, здесь можно и продолжать и нет, все зависит от размера изображений. (По умолчанию мы принимаем поле кадра за размер А0, следовательно в один кадр может поместиться 2 докум. А1, 4 докум А2, 8 докум. А3, и 16 докум А4. Это , как раз и есть те условия...Положить документ меньшего размера в большую ячейку мы можем, а вот наоборот никак нет, иначе Документ потом невозможно будет воспроизвести. То, для чего мне необходима эта программа называется "МИКРОФИЛЬМИРОВАНИЕ". Сохранение электронных образов на галагенодосеребряную пленку, с которой после проявки, при помощи специального читального аппарата можно будет воспроизвести обратно на бумажный носитель. А микрофильмированию подлежат документы предприятий определенного фактора риска для населения. Это ТЭЦ, ГЭС, Химкомбинаты и т.д. Т.е. в основном технические чертежи. Хороший пример - Саяно-Шушенская ГЭС, в случае обрушения вся имеющаяся документация на предприятии тоже исчезает, а имея страховой фонд в виде микрофильма, мы можем достаточно быстро восстановить необходимые чертежи для проведения аварийно-спасательных работ. Поэтому очень важно знать, в каком кадре находится той или иной чертеж)

добавлено через 6 минут
В продолжение...не заполненный кадр можно оставить полупустым и начать со следующего. Но бывает и так, что номер присваивается не всегда последовательно, т.к. бывают допечатки или специальные трафареты, вставляемые в микрофильм, через определенное количество кадров, для улучшения поиска, поэтому мне и нужно, чтобы прежде чем прономеровывать, уточнялось с какой цифры начинать.

добавлено через 36 минут
Да....бывает и такое, что чертеж форматом больше, чем А0, в этом случае мы его разрезаем, и таким образом на один документ может быть и несколько кадров.

Генплан (1 лист форм. 3 А0) - 10-12 кадры

Alex Dark 05.02.2010 12:01

Вложений: 1
Tigrenakat, очень тяжко додумывать за другого человека что он хочет, когда говорит "поворачивай на право" при этом машет в левую сторону.

Я предполагал что ты скажешь типа: вот листок xls я выделяю строки с 5 по 10 запускаю макрос и у меня получается ... потому что ...

Ну на нет ...
вот тебе макрос воткни его в VB. выдели нужный диапазон и запусти.
На втором листе что то получится. Разбирайся.


PS пипец заработался. А ведь хотел только кусок кода вставить, а не вложение делать

Tigrenakat 09.02.2010 19:25

Применительно к таблице ВЕДОМОСТЬ2.

Выделяю дапозон (H19:L22), запускаю макрос

Он считает сумму ячеек, далее я должна ввести ему значение на которое он будет ее делить (1,2,4,8,16,или другое), в данном случае - это 2, и указать с какого числа начать номерацию., в данном случае - с 24

В результате в диапоз. (О19:О22) получаю номера кадров с позицией. т.е макрос должен проанализировать каждую ячейку. Если я делю на 2, значит двум значениям соответствует один номер кадра. (24/1, 24/2).

Так, понятнее?

EvroStandart 10.02.2010 11:26

H19:L22 сумма ячеек получается 20. Где дальше эта цифра используется?

Описания алгоритма както не получается.

Вроде как нужно заполнять столбик О. И в каждом ряду вставлять в О одно значение. Число (24) и увеличение от 1 до делителя (2). Получится О19=24/1; О20=24/2. Дальше увеличить число на 1 и повторить увеличение до делителя: О21=25/1; О22=25/2.

Или я опять ничего непонял :biggrin:

Alex Dark 10.02.2010 14:49

да все я прекрасно понял и без объяснений.
Времени маловато.
У этой задачи есть как минимум 2 способа решения.
И у каждого будут разрые результаты.
Я не понял каким алгоритмом вы хотите получить результат.
Ладно набросаю через пару-тройку часов, когда освобожусь и выложу.
Алгоритм - оптимальное раскладывание по листам.

Alex Dark 11.02.2010 14:55

Вложений: 1
ну вот что то типа...

Tigrenakat 11.02.2010 18:51

Слушай...ты такой молодец!!!!! Просто супер!!! Огромное спасибо!!!! Ты мне очень помог!!!!Правда, как всегда. я наверно плохо описала задачу....
Скажи...я могу сама задавать на какое число производить деление??? Для меня это очень важно.
И еще....прости нахалку....но макрос не работает если в одной строке несколько значений. Например, может быть такой документ который содержит много листов и все разного формата, и в перемешку. Вот тут мне и необходимо, чтобы я сама задавала условие....
Можно так сделать??? А???
Еще раз ОГРОМНОЕ СПАСИБО!!!!

И еще...подскажи пожалуйста как мне применить твой макрос к другой таблице? Он будет работать в другой таблице, если она имеет немного другой вид?

Alex Dark 11.02.2010 21:29

Цитата:

Сообщение от Tigrenakat (Сообщение 1698176)
Скажи...я могу сама задавать на какое число производить деление??? Для меня это очень важно.

Именно это ты так и не объяснила. Для чего и как применять твое деление. Выделяешь и запускаешь. Он сам делит. Выдели все - все и поделит

Цитата:

Сообщение от Tigrenakat (Сообщение 1698176)
но макрос не работает если в одной строке несколько значений

Не знаю не думал об этом. Попробовать можно результат непредсказуем.


Цитата:

Сообщение от Tigrenakat (Сообщение 1698176)
как мне применить твой макрос к другой таблице? Он будет работать в другой таблице, если она имеет немного другой вид?

Ему по барабану вид. Он работает с колонками в которых (номера посмотри) записано количество листов и какого формата.
а так же результат выводит в колонку следующую за последней колонкой таблицы (эт я так для проверки сделал)

PS думаю можно доделать с листами нескольких форматов

Tigrenakat 11.02.2010 22:10

Смотри...например, у меня 4 докум форм.А4 а потом 8 докум. форм.А2. Я могу выделить этот диапозон и указать, что в одном кадре по 4 докум. т.е. объединяю документы по большему формату. или , что часто бывает, все А4 пишу по 8 докум. в кадре, потом есть не стандартные форматы...На самом деле ...много ньюансов..но самое главное, чтобы я сама регулировала по сколько доументов класть в кадр.

Может легче создать несколько макросов, по одному принципу, только на разное число деления т.е. (1,2.4.8.16) ???
Это так...предположение....

А, можно сделать так, что после того, как он просчитает сумму ячеек выпадало такое же окно с запросом, как "с какого кадра начать", но только "на какое число делить"?
Было бы очень здорово....

Alex Dark 12.02.2010 12:33

Цитата:

Сообщение от Tigrenakat (Сообщение 1698207)
у меня 4 докум форм.А4 а потом 8 докум. форм.А2. Я могу выделить этот диапозон и указать, что в одном кадре по 4 докум. т.е. объединяю документы по большему формату. или , что часто бывает, все А4 пишу по 8 докум. в кадре, потом есть не стандартные форматы

Я добавил галочку оптимизация, но не проверил включается она или нет. Поэтому возможно что просто не работает.


Все просто. Если оптимизация есть, то карты раскладываются по размеру с максимальной загрузкой листа. Если нет, то раскладываются в порядке "поступления", т.е. как идут в таблице.
Пример1: с оптимизацией. Сначала выбираются самые большие карты (например А3), потом (на заполненном не до конца листе) заполняются следующим форматом (А4) в порядке понижения.
Пример2: без оптимизации. перебираем все по списку и раскладываем как получится. В результате большое количество "полу-пустых" листов.

В обработку попадает только то что выделено. Не обязательно выделять блоком. Достаточно выделить пару ячеек. При этом ячейки могут идти в "разнобой", т.е. выделяешь ячейки О11,М25,С3,А8. В обработку попадут соответственно строки 3,8,11,25

Если бы у тебя был признак "группы" то можно было бы проводить оптимизацию внутри группы. Но я так думаю, что это лишняя нахлобуча. Группировать можно и вручную.

Alex Dark 12.02.2010 15:35

Вложений: 1
ну вот типа так.

Tigrenakat 12.02.2010 16:35

Вложений: 1
Смотри в чем ошибка....Макрос считает А3 и А4 как по 16 в кадр. но это не верно. Я не могу положить так документы.На 1-ом листе я посчитала как должно быть, а потом как считает макрос. Посмотри....
Я скину ведомость, посмотри лист 3. Там я попыталась изобразить , как помещаются документы в поле кадра. Если начать выкладывать документы как предложил макрос, то не хватит места для них. Если макрос сравнивает по большему формату, значит он и должен делить на то значение. которое соотвесвует этому формату. Посмотри пожалуйста....Вложение 68381

Alex Dark 13.02.2010 08:04

Я конечно посмотрю, но было бы лучше если бы ты сказала в какой строке (строках) ошибка.



PS Наличие ошибки не исключаю.

Alex Dark 13.02.2010 09:19

Судя по всему это здесь

если исходные данные таковы:
1. 4(А4)
2. 4(А3)
3. 2(А4) и 4(А3)
при раскладке с оптимизацией получаем
1. 2/1 - 2/4
2. 1/1 - 1/4
3. 1/5 - 1/8; 2/5 - 2/6
А вот без оптимизации дает сбой
1. 1/1 - 1/4
2. 1/5 - 1/8
3. 1/9 - 1/10; 1/14

Tigrenakat 13.02.2010 22:53

Ты прав...именно там сбой...
Ты знаешь...у меня все не выходит из головы мысль по поводу всплывающего окна с запросом...Надеюсь ты понимаешь, о чем я...(когда нужно вводить значение на которое делить)...Ведь хорошо когда форматы стандартные...А что делать если он не стандартные, как будет тогда макрос работать??
Например
А4 *1,5
А2 *2,5
А3 *4,5 и т.д.
Можешь что нибудь предложить...в такой ситуации???
Заранее тебе спасибо.... Огромное...:)

Alex Dark 14.02.2010 04:58

Вложений: 1
Цитата:

Сообщение от Tigrenakat (Сообщение 1698444)
А что делать если он не стандартные, как будет тогда макрос работать??

Как нибудь да посчитает. Результат непредсказуем.
Попробуй. Увидишь.

математика (кстати о птичках) там простая А0 - это 1;
А1 - 0,5 (1/2); А2 - 0,25 (1/2/2) и т.д.

PS. Проверь. Что то мне подсказывает, что есть ошибочка в алгоритме.

Tigrenakat 14.02.2010 19:52

Спасибо тебе огромное!!!! Завтра выйду на работу, посмотрю повнимательнее.
Можешь ответить по поводу всплывающего окна для указания делителя,....Это вообще реально? А то я все пытаю тебя, а ты оставляешь мои вопросы без ответа.....
Просто, мне кажется, с таким вариантом макроса (с еще одним всплывающим окном) было бы реально просчитывать как раз не стандартные форматы.
Например А4*4 у нас может быть как А2 и как прибл. А1 и следовательно выделив диапозон и указав делитель , ошибок при расчете будет меньше.....
Прости за такую дотошность....Я понимаю, что ты итак провел огромню работу....
СПАСИБО!!!

Alex Dark 15.02.2010 06:59

Цитата:

Сообщение от Tigrenakat (Сообщение 1698494)
А то я все пытаю тебя, а ты оставляешь мои вопросы без ответа.....

Ну... не совсем так. Для начала все же надо довести алгоритм придуманый мною до нормального работоспособного состояния, а уж потом пытаться подогнать его под возможные "не стандартные" варианты решения.

Цитата:

Сообщение от Tigrenakat (Сообщение 1698494)
Можешь ответить по поводу всплывающего окна для указания делителя,

Вот с делителем мне чесно говоря совсем не понятно.
Возьми конкретный пример, и распиши как ты его себе видишь. И не только словами, но и с рисункоми. И желательно от начала и до конца.
(Возможно что в указании делителя нет необходимости вообще, так часто бывает, потому что пользователь не всегда знает как работает алгоритм)

Цитата:

Сообщение от Tigrenakat (Сообщение 1698494)
Например А4*4 у нас может быть как А2 и как прибл. А1 и следовательно выделив диапозон и указав делитель , ошибок при расчете будет меньше.....

А4*4 это А2. А что значит "и как прибл. А1"
можно конечно А4 раскидать так, что это будет А1 с пустотами и даже А0. Но это не оптимально. И зачем???

Tigrenakat 15.02.2010 18:16

Я сегодня посмотрела 2-ой лист Ведомости5,там где таблички... Раскладка не правильная.... У меня машина, которая пишет микрофильмы, хоть и немецкая, но не такая умная как твой макрос... Если она делит на 2 части кадр, значит там может поместиться только 2 документа.
По умолчанию 1 кадр - Ао
Если мы делим на 2 части, значит может поместиться 2 документа максимального размера А1, но так же могут быть размеры меньше А1, но только два. Хоть 1 А4 и 1 А2,

Машина их сама оптимизирует на размер ячейки, но больше 2-х я положить не могу.
Тут как раз и ошибка в макросе....

Alex Dark 15.02.2010 19:15

НУ вот теперь то кажется я понял в чем суть проблемы.
Завтра будет день. Завтра будем думать

Alex Dark 16.02.2010 06:43

Tigrenakat, Если я правильно понял и память мне не изменяет, твоя машинка поступает следующим образом
Если ей дают 1 чертеж, она просто его заливает в кадр формата А0.
Если ей дают несколько чертежей, она берет количество чертежей кратное двум и закатывает его в кадр.
Вот тут возникает вопрос.
Если ей мы даем два А1 - все просто.
один А1 и один А2(3,4) - тоже все просто, один кадр два чертежа.

А если у тебя три чертежа А1,А2,А3
Она понимает, что А0 делим пополам, на первую половину пишем А1.
Вторую половину так же делим пополам и получаем один А2 и один А3?
(и соответственно далее в сторону понижения)

Если у тебя три чертежа: один А1, и два А2
Она понимает, что это все помещается на 1 кадр?
(или ей надо 2 кадра)

Как она воспримет один A1 и восемь А4 (четыре А3, два А2)

Tigrenakat 16.02.2010 07:38

Вот по этому я просила второе всплывающее окно , где я бы сама принимала решение как их располагать... Я могу все 3 записать как А0, могу два как А1 и один как Ао...
Выделяла бы этот диапозон...макрос просчитывал сумму, всплывало окно....туда я бы вводила значение на которое необходимо разделить......ок....далее всплывало другое окно (или можно вс объединить, по возможности) где указывала с какого кадра начать.....он бы считал уже на основании моих значений...
Тут главное мне самой формировать фильм и расположение...ему главное потом просчитать ...

Tigrenakat 21.02.2010 09:33

Вложений: 1
Вложение 68414
Первое изображение если я ничего не удаляю..
Второе ....после удаления строки...

Alex Dark 22.02.2010 07:23

Я сталкивался с такой ерундой. Только очень давно, и не помню что делать надо. Решалось очень просто.

Посмотри в VB tools, references.
У тебя должны быть включены опции:
VB for applications
mExcel 11.0 object library
mOffice 11.0 object library
OLE Automation

Я не знаю как у тебя, но вообще-то они должны быть все в начале


Если это не поможет, самое тупое решение этой
Код:

Function Chr( par )
Chr=" "
End Function

но это решение не верное. Следом пойдут новые ошибки


Часовой пояс GMT +4, время: 21:39.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.