Форум программистов, компьютерный форум, киберфорум
Наши страницы
CorelDRAW
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
1

Массив из shape range

06.10.2018, 07:09. Просмотров 638. Ответов 28
Метки vba (Все метки)

Все привет! Подскажите пожалуйста, пишу макрос для cdr и в процессе его создания, нужно сделать массив из shape range

Часть кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim gr2_fall As New ShapeRange 
 
For i = 1 To so.Count
        For Each s In gr2_f3
            If so(i).SizeHeight = s.SizeWidth Then
                For Each d In gr2_f1
                    If s.PositionY = d.PositionY Then
                gr2_fall.Add s
                gr2_fall.Add so(i)
                gr2_fall.Add d
                    End If
                Next
            End If
        Next
    Next
Все переменные тут - ShapeRange
Вот тут при выполнении всех условий мне нужно получить массив:

ar(( s1, so1, d1), (s2, so2, d2), и тд.) - можно ли такое реализовать?



Как вариант, пробовал группировать (s1, so1, d1), при выполнении условия, но цикл ошибку выдает, после группировки на след. итерации. Как то выход из цикла нужно сделать... Если с этим разобраться, то в принципе, gr2_fall - будет как бы ShapeRange с группами, такой вариант тоже подойдет.

Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2018, 07:09
Ответы с готовыми решениями:

При вызове объекта Range, VBA самостоятельно меняет Range на rAnge
Всем доброго дня, у меня такой вопрос. По незнанию создал функцию rAnge(), теперь при вызове...

Сохранить свой shape как нормальный shape
Создаю свой shape в MS Office Word 2007 Скажите, есть ли возможность сохранить его как shape для...

shape/ layer shape в по заданному изображению
Не могу shape для использования в приложении: background Может кто поможет. <?xml...

Shape.top в массив
у меня на форме много shape,нужно top каждого записать в массив,можно ли это сделать как то с...

Координаты Shape в массив
Создаю динамически Shape'ы и заношу их в массив. Как занести координаты каждого создаваемого шейпа...

28
_shark
169 / 169 / 29
Регистрация: 11.10.2016
Сообщений: 536
18.12.2018, 09:52 21
как вариант, проверять массив на одинаковые элементы можно на этапе его заполнения. Например, сделать процедуру помещения значения в массив и прогнать по всем элементам есть ли уже такое значение или нет. Кроме того, в параметрах процедуры сделать "флажок", т.е. ввести переменную типа boolean, отвечающую за эту проверку. То есть, если значений много, то мы эту проверку отключаем, в цикле по-быстрому закидываем все элементы, а потом уже сортируем и исключаем повторяющиеся. Если же значение только одно, то проверку включаем и проверяем значение по всем внесенным в массив. Для удобства можно вести две переменные с граничными значениями - с самым большим и самым маленьким. Тогда проверка будет быстрее и проще, если новое значение меньше минимального, то мы его сразу в начало, больше максимального - сразу в конец, где-то между ними - делаем цикл по всем имеющимся элементам кроме граничных, мы-то их уже проверили.
1
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
19.12.2018, 18:36  [ТС] 22
_shark, да, вариант хороший, но мне в этом макросе немного не подходит, выше вы вроде выкладывали примерно похожий код, обязательно скопирую себе, чувствую в дальнейшем этот метод(проверка по уже внесенным значениям) может пригодиться. Спасибо!
0
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
01.01.2019, 15:11  [ТС] 23
Ещё такой вопрос, как можно кнопку "Reset", которая в Vba редакторе рядом с "Run macro" и " Break", в коде прописать??
Это нужно для того, что бы после выполнения макроса переменные обнулялись. Гугл не помог..
Если есть другой способ, буду признателен за ответ.
0
_shark
169 / 169 / 29
Регистрация: 11.10.2016
Сообщений: 536
01.01.2019, 18:10 24
ваш макрос запускает какую-либо пользовательскую диалоговую форму?
1
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
02.01.2019, 08:58  [ТС] 25
На данный момент нет, потом может понадобиться, точно не знаю еще
0
_shark
169 / 169 / 29
Регистрация: 11.10.2016
Сообщений: 536
02.01.2019, 17:17 26
тогда в самом конце работы макроса просто обнуляйте переменные кодом. Как вариант, сделайте одну переменную, например, Init As Boolean, и сбрасывайте ее в False в конце работы вашего макроса. А при запуске проверяйте ее значение, If Init = False, тогда устанавливайте значения ваших переменных.
1
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
03.01.2019, 15:53  [ТС] 27
Действительно, обнулить и все.. Спасибо!, а про форму вы спрашивали, это как-то связано с "reset"?
Будет форма с TextBox-ом, там будет информация, которую буду копипастить
0
_shark
169 / 169 / 29
Регистрация: 11.10.2016
Сообщений: 536
04.01.2019, 02:21 28
про форму я спрашивал потому, что когда вы ее скрываете командой myForm.Hide, то она просто скрывается, но связанные с ней данные остаются в памяти. Если же ее выгружать командой, UnLoad myForm, то все данные аннулируются.
1
Dimson_
3 / 2 / 1
Регистрация: 02.11.2016
Сообщений: 59
04.01.2019, 12:24  [ТС] 29
Интересно, попробую как-нибудь
0
04.01.2019, 12:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2019, 12:24

Массивы компонентов билдера. Массив Shape и StringGrid
Доброго времени суток Товарищи! Подскажите мне пожалуйста как правильно записать массив из...

питон shape вернул массив без второго аргумента
import numpy as np def vvod(nameF): dta = np.genfromtxt(nameF) return dta X =...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru