Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Построение полилинии по координатам - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Построение полилинии по координатам (Макросы/Sub)
Построение полилинии по координатам
rotten41 Дата: Суббота, 10.06.2017, 20:47 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 123
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый вечер, специалисты по экселю.
Помогите решить вопрос.

В таблице находятся координаты - замкнутой ломаной линии (имеются ввиду координаты на листе Автофигуры Полилинии).
Как при щелчке на кнопку - заставить макрос нарисовать Полилинию по этим координатам - на листе , стерев при этом предыдущую Полилинию ?
К сообщению приложен файл: 657567.xls(32Kb)
 
Ответить
СообщениеДобрый вечер, специалисты по экселю.
Помогите решить вопрос.

В таблице находятся координаты - замкнутой ломаной линии (имеются ввиду координаты на листе Автофигуры Полилинии).
Как при щелчке на кнопку - заставить макрос нарисовать Полилинию по этим координатам - на листе , стерев при этом предыдущую Полилинию ?

Автор - rotten41
Дата добавления - 10.06.2017 в 20:47
AndreTM Дата: Суббота, 10.06.2017, 22:04 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1540
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
А попробовать начать делать?

Шейпы, вообще-то, объекты внедряемые, так что внутренняя структура шейпа - это дело объектной модели самого шейпа.

С другой стороны, возьмём ту же полилинию.
У неё коллекция .Nodes должна содержать все узлы; в узле свойство .SegmentType = тип полилинии узла, а свойство .Points - точку узла.


Donate: Qiwi: 9517375010
 
Ответить
СообщениеА попробовать начать делать?

Шейпы, вообще-то, объекты внедряемые, так что внутренняя структура шейпа - это дело объектной модели самого шейпа.

С другой стороны, возьмём ту же полилинию.
У неё коллекция .Nodes должна содержать все узлы; в узле свойство .SegmentType = тип полилинии узла, а свойство .Points - точку узла.

Автор - AndreTM
Дата добавления - 10.06.2017 в 22:04
rotten41 Дата: Суббота, 10.06.2017, 22:58 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 123
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
AndreTM, а в коде - это как должно выглядеть ?
 
Ответить
СообщениеAndreTM, а в коде - это как должно выглядеть ?

Автор - rotten41
Дата добавления - 10.06.2017 в 22:58
Roman777 Дата: Воскресенье, 11.06.2017, 14:12 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 776
Репутация: 87 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
rotten41, что-то типа такого:
[vba]
Код
Sub Макрос1()
Dim sh As Shape
Dim r As Range
Dim t() As Single
    Set r = ActiveSheet.Range("C8:D13")
    n& = r.Rows.Count
    ReDim t(n, 2)
    For i = 1 To n
        t(i, 1) = r.Cells(i, 1).Value
        t(i, 2) = r.Cells(i, 2).Value
    Next i
    For Each sh In ActiveSheet.Shapes
        If sh.Type = 5 Then
            sh.Delete
        End If
    Next sh
    Set sh = ActiveSheet.Shapes.AddPolyline(t)
    sh.Fill.Visible = msoFalse
    sh.Name = "Полилиния"
End Sub
[/vba]
А для точности удаления именно предыдущей линии, созданной этим макросом (а не всех полилиний, которые есть на листе, как сейчас), можно давать имя конкретное в строке     [vba]
Код
sh.Name = "Полилиния_Своё_имя"
[/vba], и в Макросе прописать условие вместо:
[vba]
Код
        If sh.Type = 5 Then
            sh.Delete
        End If
[/vba]
[vba]
Код
        If sh.Name = "Полилиния_Своё_имя" Then
            sh.Delete
        End If
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Воскресенье, 11.06.2017, 14:17
 
Ответить
Сообщениеrotten41, что-то типа такого:
[vba]
Код
Sub Макрос1()
Dim sh As Shape
Dim r As Range
Dim t() As Single
    Set r = ActiveSheet.Range("C8:D13")
    n& = r.Rows.Count
    ReDim t(n, 2)
    For i = 1 To n
        t(i, 1) = r.Cells(i, 1).Value
        t(i, 2) = r.Cells(i, 2).Value
    Next i
    For Each sh In ActiveSheet.Shapes
        If sh.Type = 5 Then
            sh.Delete
        End If
    Next sh
    Set sh = ActiveSheet.Shapes.AddPolyline(t)
    sh.Fill.Visible = msoFalse
    sh.Name = "Полилиния"
End Sub
[/vba]
А для точности удаления именно предыдущей линии, созданной этим макросом (а не всех полилиний, которые есть на листе, как сейчас), можно давать имя конкретное в строке     [vba]
Код
sh.Name = "Полилиния_Своё_имя"
[/vba], и в Макросе прописать условие вместо:
[vba]
Код
        If sh.Type = 5 Then
            sh.Delete
        End If
[/vba]
[vba]
Код
        If sh.Name = "Полилиния_Своё_имя" Then
            sh.Delete
        End If
[/vba]

Автор - Roman777
Дата добавления - 11.06.2017 в 14:12
rotten41 Дата: Воскресенье, 11.06.2017, 15:52 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 123
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Roman777, не работает.
Выдает ошибку "Run-time error `1004` Указанный параметр имеет неправильный тип данных".
Если нажать на кнопку Debug - то в макросе подсветится строка: Set sh = ActiveSheet.Shapes.AddPolyline(t)
 
Ответить
СообщениеRoman777, не работает.
Выдает ошибку "Run-time error `1004` Указанный параметр имеет неправильный тип данных".
Если нажать на кнопку Debug - то в макросе подсветится строка: Set sh = ActiveSheet.Shapes.AddPolyline(t)

Автор - rotten41
Дата добавления - 11.06.2017 в 15:52
nilem Дата: Воскресенье, 11.06.2017, 16:20 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1215
Репутация: 444 ±
Замечаний: 0% ±

Excel 2013
rotten41,
вот эту строку
[vba]
Код
ReDim t(n, 2)
[/vba]
запишите так
[vba]
Код
ReDim t(1 To n, 1 To 2)
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеrotten41,
вот эту строку
[vba]
Код
ReDim t(n, 2)
[/vba]
запишите так
[vba]
Код
ReDim t(1 To n, 1 To 2)
[/vba]

Автор - nilem
Дата добавления - 11.06.2017 в 16:20
rotten41 Дата: Воскресенье, 11.06.2017, 17:11 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 123
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
nilem, работает.
Большое спасибо.
 
Ответить
Сообщениеnilem, работает.
Большое спасибо.

Автор - rotten41
Дата добавления - 11.06.2017 в 17:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Построение полилинии по координатам (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!