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

Массив из shape range

06.10.2018, 07:09. Просмотров 2206. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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 в массив
Создаю динамически Shape'ы и заношу их в массив. Как занести координаты каждого создаваемого шейпа...

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Массивы компонентов билдера. Массив 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 - 2020, vBulletin Solutions, Inc.