Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 21:42   #1
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
Подмигивание Помогите написать макрос

Добрый вечер, помогите написать макрос. В прикрепленном файле я выложил пример уже результата. Это фигура, произвольной формы. Как сделать что бы выставились точки на листе и отформатировать знаю как а как с помощью макроса провести линии которые соединяют точки представления не имею даже. Помогите пожалуйста.
Вложения
Тип файла: rar primer.rar (8.7 Кб, 17 просмотров)
Govard вне форума Ответить с цитированием
Старый 02.07.2009, 22:26   #2
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
По умолчанию

Идеальное решение задачи конечно такое. Допустим есть массив точек на листе Excel, задача для макроса, найти точки которые лежат на одной прямой и на одинаковом расстоянии друг от друга, и провести между этими точками прямую линию.
Как показано на примере 2 в прикрепленном файле.
Честно говоря я не представляю даже как это сделать, помогите пожалуйста если кто-то знает как это сделать.
Вложения
Тип файла: rar primer2.rar (5.2 Кб, 12 просмотров)
Govard вне форума Ответить с цитированием
Старый 03.07.2009, 03:18   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub ПровестиЛинию(ByRef cell1 As Range, ByRef cell2 As Range, _
                  Optional ByVal ЦветЛинии As Long = 12)

    cell1 = "#": cell2 = "#"

    BeginX = cell1.Left + cell1.Width / 2: EndX = cell2.Left + cell2.Width / 2
    BeginY = cell1.Top + cell1.Height / 2: EndY = cell2.Top + cell2.Height / 2

    With ActiveSheet.Shapes.AddLine(BeginX, BeginY, EndX, EndY)
        .Line.Weight = 1
        .Line.ForeColor.SchemeColor = ЦветЛинии
    End With
End Sub

Sub ПримерИспользования()
    ПровестиЛинию [d22], [h24], 11
    ПровестиЛинию [h24], [f31], 10
    ПровестиЛинию [f31], [n38]
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 13:09   #4
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
По умолчанию

Восхитительно. Спасибо огромное EducatedFool .
Правда рисует разными цветами но все равно спасибо огромное.
Удивительное рядом
А как задать точке значение например такого содержания, если от нашей ячейки, ну например А12, есть на листе к примеру еще 2 ячейки которые лежат с А12 на одной прямой, и имеют одинаковое расстояние между собой, найти и обратится к макросу
Код:
Sub AA()
    SS [d22], [h24], 11
    SS [h24], [f31], 10
    SS [f31], [n38]
End Sub
Что бы он провел линию между ними. Выходит ну макрос поиска назовем PP должен подставить в макрос АА значения SS которые нашел, это возможно сделать?
Govard вне форума Ответить с цитированием
Старый 03.07.2009, 14:01   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Выходит ну макрос поиска назовем PP должен подставить в макрос АА значения SS которые нашел, это возможно сделать?
Да, возможно.
Только я не понял, по каким признакам искать "ячейки которые лежат с А12 на одной прямой"
Был бы пример файла с 2 листами (на одном - ячйки без линий, на другом - то, что должно получиться (с линиями)) - сделал бы.

Цитата:
Правда рисует разными цветами но все равно спасибо огромное.
Посмотрите внимательно на код.
Видите там числа 10 и 11?
Так вот это необязательный параметр макроса - цвет линии.
Не указывайте его, или указывайте везде одинаковый - и линии будут одного цвета.
Код:
Sub ПримерИспользования()
    ПровестиЛинию [d22], [h24]
    ПровестиЛинию [h24], [f31]
    ПровестиЛинию [f31], [n38]
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 14:05   #6
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
По умолчанию

Вот в примере сейчас при нажатии на кнопку Линия, макрос рисует линии.
Нужно что бы при нажатии на кнопку линия макрос от исходной точки *1* перечитал все ячейки вверх по листу, и если нашелл соотетствие прямой тоесть ячейки *2* и *3* удовлетворяют требованиям и *8* и *9* тоже, макрос дальше должен обратится к нашему макросу что проводит линию и провести линию от точки *3 до точки *1* и от точки *1* до точки *8*.
Так можно сделать? Подскажите плиз.
Вложения
Тип файла: rar primer3.rar (14.7 Кб, 7 просмотров)
Govard вне форума Ответить с цитированием
Старый 03.07.2009, 14:09   #7
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
По умолчанию

В примере 4 - 2 листа, первый до работы макроса а второй после выполнения, с цветами понял, спасибо большое.
Вложения
Тип файла: rar primer4.rar (16.7 Кб, 8 просмотров)
Govard вне форума Ответить с цитированием
Старый 03.07.2009, 15:22   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вообще-то, в примере4 точки 1, 8 и 9 не лежат на одной прямой...
Или достаточно, чтобы прямая 1-8 пересекала ячейку, содержащую 9?

И для чего всё это нужно?
EducatedFool вне форума Ответить с цитированием
Старый 03.07.2009, 15:53   #9
Govard
Пользователь
 
Аватар для Govard
 
Регистрация: 02.07.2009
Сообщений: 12
По умолчанию

Да Вы правы, там ошибка они не лежат на одной прямой.
Макрос там не должен провести линию.
Должен на примере провести линию от 1 до 3 только.
А нужно это мне для исследований созвездий.
Ну это длинная история. Если можете помочь мне помогите разобраться с макросами и сделать решение такой задачи. Буду очень Вам благодарен.
Govard вне форума Ответить с цитированием
Старый 03.07.2009, 16:15   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сколько всего точек может быть на листе?
Что находится в ячейках - только цифры от 1 до 9, или что?
Что за нули в ячейках файла-примера? Их тоже обрабатывать?

К примеру, на одной линии лежат точки 1-2-3.
Рисовать одну линию 1-3, или 2 линии: 1-2 и 2-3?

Чем больше будет подробностей, тем быстрее получите готовое решение.

Как заносятся точки на лист? Вручную с рисунка, или на основании какой-то таблицы?

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

Последний раз редактировалось EducatedFool; 03.07.2009 в 16:17.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуста написать макрос Kuchum-83 Microsoft Office Excel 8 22.04.2009 14:51
Помогите написать макрос!!! zmax123 Microsoft Office Excel 4 16.03.2009 14:02
Помогите написать макрос Urban Microsoft Office Excel 3 03.03.2009 22:28
Помогите написать макрос для... КотФиларет Microsoft Office Word 15 24.01.2009 23:00
Помогите написать макрос Neo007 Microsoft Office Excel 4 24.10.2008 07:25