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

Вход

Регистрация

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

 

= Мир MS Excel/Расположение пяти фигур - симметрично, строго под линией - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расположение пяти фигур - симметрично, строго под линией (Макросы/Sub)
Расположение пяти фигур - симметрично, строго под линией
RipVanWinkel Дата: Четверг, 21.12.2017, 04:49 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе утро, специалисты по программированию
Помогите разобраться с задачей.

На листе находится линия, чье название вписано в ячейку M3.
Рядом находится определенная сгруппированная фигура, чье название вписано в ячейку K3.

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

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

На листе находится линия, чье название вписано в ячейку M3.
Рядом находится определенная сгруппированная фигура, чье название вписано в ячейку K3.

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

Подскажите - как это сделать макросом ?
(Длина линии может быть любой.)

Автор - RipVanWinkel
Дата добавления - 21.12.2017 в 04:49
Pelena Дата: Четверг, 21.12.2017, 10:36 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 12043
Репутация: 2651 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Здравствуйте.
Если линия строго горизонтальная, то можно так
[vba]
Код
Public Sub Copy5()
    Dim ln As Shape, fg As Shape
    Dim step, i&
    With ActiveSheet
        Set ln = .Shapes(Range("M3").Text)
        Set fg = .Shapes(Range("K3").Text)
        step = (ln.Width - fg.Width) / 4
        fg.Copy
        For i = 0 To 4
            .Paste
            .Shapes(.Shapes.Count).Left = ln.Left + step * i
            .Shapes(.Shapes.Count).Top = ln.Top
        Next i
    End With
End Sub
[/vba]
К сообщению приложен файл: 8311957.xls(70Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Если линия строго горизонтальная, то можно так
[vba]
Код
Public Sub Copy5()
    Dim ln As Shape, fg As Shape
    Dim step, i&
    With ActiveSheet
        Set ln = .Shapes(Range("M3").Text)
        Set fg = .Shapes(Range("K3").Text)
        step = (ln.Width - fg.Width) / 4
        fg.Copy
        For i = 0 To 4
            .Paste
            .Shapes(.Shapes.Count).Left = ln.Left + step * i
            .Shapes(.Shapes.Count).Top = ln.Top
        Next i
    End With
End Sub
[/vba]

Автор - Pelena
Дата добавления - 21.12.2017 в 10:36
Roman777 Дата: Четверг, 21.12.2017, 11:13 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 822
Репутация: 98 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
RipVanWinkel, Тоже самое. Для негоризонтальной линии:
[vba]
Код
Type point_
    X As Single
    Y As Single
End Type
Sub ddd()
    Dim line1 As Shape
    Dim figure1 As Shape, figure2 As Shape
    Dim pline(2) As point_, lineW As Single
    Dim k As Single
    Dim VF As Boolean, HF As Boolean
    Set line1 = ActiveSheet.Shapes(Cells(3, 13))
    Set figure1 = ActiveSheet.Shapes(Cells(3, 11))
    line1.Select
    figure1.Select
    VF = line1.DrawingObject.ShapeRange.VerticalFlip ' свойство меняется при изменении положения отрезка в пространстве
    HF = line1.DrawingObject.ShapeRange.HorizontalFlip ' свойство меняется при изменении положения отрезка в пространстве
    If VF = HF Then
        pline(1).X = line1.Left
        pline(1).Y = line1.Top
        pline(2).X = line1.Left + line1.Width
        pline(2).Y = line1.Top + line1.Height
    Else
        pline(1).X = line1.Left
        pline(1).Y = line1.Top + line1.Height
        pline(2).X = line1.Left + line1.Width
        pline(2).Y = line1.Top
    End If
    lineW = Sqr((pline(1).Y - pline(2).Y) ^ 2 + (pline(1).X - pline(2).X) ^ 2)
    n& = 5
    For i = 1 To n
        figure1.Copy
        ActiveSheet.Paste
        Set figure2 = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
        k = (i - 1) / (n - 1)
        figure2.Top = pline(1).Y + k * (pline(2).Y - pline(1).Y)
        figure2.Left = pline(1).X + k * (pline(2).X - pline(1).X) - figure2.Width / 2
    Next i
End Sub
[/vba]
К сообщению приложен файл: _458908.xls(74Kb)


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

Сообщение отредактировал Roman777 - Четверг, 21.12.2017, 21:51
 
Ответить
СообщениеRipVanWinkel, Тоже самое. Для негоризонтальной линии:
[vba]
Код
Type point_
    X As Single
    Y As Single
End Type
Sub ddd()
    Dim line1 As Shape
    Dim figure1 As Shape, figure2 As Shape
    Dim pline(2) As point_, lineW As Single
    Dim k As Single
    Dim VF As Boolean, HF As Boolean
    Set line1 = ActiveSheet.Shapes(Cells(3, 13))
    Set figure1 = ActiveSheet.Shapes(Cells(3, 11))
    line1.Select
    figure1.Select
    VF = line1.DrawingObject.ShapeRange.VerticalFlip ' свойство меняется при изменении положения отрезка в пространстве
    HF = line1.DrawingObject.ShapeRange.HorizontalFlip ' свойство меняется при изменении положения отрезка в пространстве
    If VF = HF Then
        pline(1).X = line1.Left
        pline(1).Y = line1.Top
        pline(2).X = line1.Left + line1.Width
        pline(2).Y = line1.Top + line1.Height
    Else
        pline(1).X = line1.Left
        pline(1).Y = line1.Top + line1.Height
        pline(2).X = line1.Left + line1.Width
        pline(2).Y = line1.Top
    End If
    lineW = Sqr((pline(1).Y - pline(2).Y) ^ 2 + (pline(1).X - pline(2).X) ^ 2)
    n& = 5
    For i = 1 To n
        figure1.Copy
        ActiveSheet.Paste
        Set figure2 = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
        k = (i - 1) / (n - 1)
        figure2.Top = pline(1).Y + k * (pline(2).Y - pline(1).Y)
        figure2.Left = pline(1).X + k * (pline(2).X - pline(1).X) - figure2.Width / 2
    Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 21.12.2017 в 11:13
RipVanWinkel Дата: Четверг, 21.12.2017, 19:49 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, Pelena, - спасибо. Макросы работают.
 
Ответить
СообщениеRoman777, Pelena, - спасибо. Макросы работают.

Автор - RipVanWinkel
Дата добавления - 21.12.2017 в 19:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расположение пяти фигур - симметрично, строго под линией (Макросы/Sub)
Страница 1 из 11
Поиск:

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