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

Вход

Регистрация

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

 

= Мир MS Excel/Использование в макросе точных копий фигуры - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Использование в макросе точных копий фигуры
Snegovik Дата: Вторник, 28.05.2019, 12:00 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго дня, уважаемые специалисты по экселю.

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

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

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

Как поменять макрос, чтобы он расставлял именно полностью точные копии указанной в макросе фигуры ?

Автор - Snegovik
Дата добавления - 28.05.2019 в 12:00
krosav4ig Дата: Вторник, 28.05.2019, 12:58 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Доброго.
Какой-то у вас овал квадратный :)
[vba]
Код
Sub drawCircles()
    Dim pCircle As Shape
    Dim pPoly As Shape
    Dim pNodes As ShapeNodes
    Dim pSheet As Worksheet
    Dim kNode As Long, xOff As Double, yOff As Double
    Dim dX As Double, dY As Double, pointDist As Double
    Dim Xc As Double, Yc As Double, curDist As Double
    Set pSheet = ActiveSheet
    Set pPoly = pSheet.Shapes("Полилиния 2")
    Set pCircle = pSheet.Shapes("Овал 16")
    xOff = -0.5 * pCircle.Width
    yOff = -0.5 * pCircle.Height
    curDist = 0#
    Set pNodes = pPoly.Nodes
    For kNode = 1 To pNodes.Count - 1
        dX = pNodes(kNode + 1).Points(1, 1) - pNodes(kNode).Points(1, 1)
        dY = pNodes(kNode + 1).Points(1, 2) - pNodes(kNode).Points(1, 2)
        pointDist = Math.Sqr(dX ^ 2 + dY ^ 2)
        dX = dX / pointDist
        dY = dY / pointDist
        Do Until curDist > pointDist
            Xc = pNodes(kNode).Points(1, 1) + curDist * dX + xOff
            Yc = pNodes(kNode).Points(1, 2) + curDist * dY + yOff
            'pSheet.Shapes.AddShape msoShapeOval, Xc, Yc, pCircle.Width, pCircle.Height
            With [Овал 16].Duplicate
                .Top = Yc
                .Left = Xc
            End With
            curDist = curDist + 50
        Loop
        curDist = curDist - pointDist
    Next
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Вторник, 28.05.2019, 12:59
 
Ответить
СообщениеДоброго.
Какой-то у вас овал квадратный :)
[vba]
Код
Sub drawCircles()
    Dim pCircle As Shape
    Dim pPoly As Shape
    Dim pNodes As ShapeNodes
    Dim pSheet As Worksheet
    Dim kNode As Long, xOff As Double, yOff As Double
    Dim dX As Double, dY As Double, pointDist As Double
    Dim Xc As Double, Yc As Double, curDist As Double
    Set pSheet = ActiveSheet
    Set pPoly = pSheet.Shapes("Полилиния 2")
    Set pCircle = pSheet.Shapes("Овал 16")
    xOff = -0.5 * pCircle.Width
    yOff = -0.5 * pCircle.Height
    curDist = 0#
    Set pNodes = pPoly.Nodes
    For kNode = 1 To pNodes.Count - 1
        dX = pNodes(kNode + 1).Points(1, 1) - pNodes(kNode).Points(1, 1)
        dY = pNodes(kNode + 1).Points(1, 2) - pNodes(kNode).Points(1, 2)
        pointDist = Math.Sqr(dX ^ 2 + dY ^ 2)
        dX = dX / pointDist
        dY = dY / pointDist
        Do Until curDist > pointDist
            Xc = pNodes(kNode).Points(1, 1) + curDist * dX + xOff
            Yc = pNodes(kNode).Points(1, 2) + curDist * dY + yOff
            'pSheet.Shapes.AddShape msoShapeOval, Xc, Yc, pCircle.Width, pCircle.Height
            With [Овал 16].Duplicate
                .Top = Yc
                .Left = Xc
            End With
            curDist = curDist + 50
        Loop
        curDist = curDist - pointDist
    Next
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 28.05.2019 в 12:58
Snegovik Дата: Вторник, 28.05.2019, 13:39 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
krosav4ig, большое спасибо Вам.
 
Ответить
Сообщениеkrosav4ig, большое спасибо Вам.

Автор - Snegovik
Дата добавления - 28.05.2019 в 13:39
  • Страница 1 из 1
  • 1
Поиск:

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