Добрый день, специалисты по VBA. Помогите решить непростую техническую проблему.
На листе располагается множество фигур-Овалов. Как макросом определить координаты самой верхней, самой нижней, самой правой и самой левой фигуры (и вывести их в табличку координат N6:O9) ?
Добрый день, специалисты по VBA. Помогите решить непростую техническую проблему.
На листе располагается множество фигур-Овалов. Как макросом определить координаты самой верхней, самой нижней, самой правой и самой левой фигуры (и вывести их в табличку координат N6:O9) ?OlegSmirnov
AndreTM, нет, наименования фигур совершенно не важны. Нужны только координаты самой верхней автофигуры, самой нижней, самой правой и самой левой. Точка для определения положения - это наверное центр шейпа.
AndreTM, нет, наименования фигур совершенно не важны. Нужны только координаты самой верхней автофигуры, самой нижней, самой правой и самой левой. Точка для определения положения - это наверное центр шейпа.OlegSmirnov
Это и был вопрос. Что считать координатами. У шейпов нет X и Y, а есть всякие .Top, .Left и т.д., потому что фигура - не точка. При этом вы должны понимать, что вы по какому-то принципу должны сравнить положение (по каким-то координатам НЕ точки), и какие-то координаты выдать в таблицу (раз хотите какие-то там X, Y - то какой именно точки "на найденной фигуре" это будут координаты?)
Это и был вопрос. Что считать координатами. У шейпов нет X и Y, а есть всякие .Top, .Left и т.д., потому что фигура - не точка. При этом вы должны понимать, что вы по какому-то принципу должны сравнить положение (по каким-то координатам НЕ точки), и какие-то координаты выдать в таблицу (раз хотите какие-то там X, Y - то какой именно точки "на найденной фигуре" это будут координаты?)AndreTM
Добрый день, специалисты по VBA. Помогите решить непростую техническую проблему.
На листе располагается множество фигур-Овалов. Как макросом определить координаты самой верхней, самой нижней, самой правой и самой левой фигуры (и вывести их в табличку координат N6:O9) ?
Добрый день, специалисты по VBA. Помогите решить непростую техническую проблему.
На листе располагается множество фигур-Овалов. Как макросом определить координаты самой верхней, самой нижней, самой правой и самой левой фигуры (и вывести их в табличку координат N6:O9) ?OlegSmirnov
Sub coord() Dim a(1 To 4, 1 To 3), i%, j% With ActiveSheet.Shapes(1) For i = 1 To 4 a(i, 1) = .Left + .Width / 2 a(i, 2) = .Top - .Height / 2 Next End With
For i = 1 To ActiveSheet.Shapes.Count With ActiveSheet.Shapes(i) If .Top - .Height / 2 < a(1, 2) Then a(1, 1) = .Left + .Width / _ 2: a(1, 2) = .Top - .Height / 2: a(1, 3) = .Name If .Left + .Width / 2 < a(2, 1) Then a(2, 1) = .Left + .Width / _ 2: a(2, 2) = .Top - .Height / 2: a(2, 3) = .Name If .Left + .Width / 2 > a(3, 1) Then a(3, 1) = .Left + .Width / _ 2: a(3, 2) = .Top - .Height / 2: a(3, 3) = .Name If .Top - .Height / 2 > a(4, 2) Then a(4, 1) = .Left + .Width / _ 2: a(4, 2) = .Top - .Height / 2: a(4, 3) = .Name End With Next i [Start].Offset(1, 1).Resize(4, 3) = a End Sub
[/vba]
Видимо как-то так
[vba]
Код
Sub coord() Dim a(1 To 4, 1 To 3), i%, j% With ActiveSheet.Shapes(1) For i = 1 To 4 a(i, 1) = .Left + .Width / 2 a(i, 2) = .Top - .Height / 2 Next End With
For i = 1 To ActiveSheet.Shapes.Count With ActiveSheet.Shapes(i) If .Top - .Height / 2 < a(1, 2) Then a(1, 1) = .Left + .Width / _ 2: a(1, 2) = .Top - .Height / 2: a(1, 3) = .Name If .Left + .Width / 2 < a(2, 1) Then a(2, 1) = .Left + .Width / _ 2: a(2, 2) = .Top - .Height / 2: a(2, 3) = .Name If .Left + .Width / 2 > a(3, 1) Then a(3, 1) = .Left + .Width / _ 2: a(3, 2) = .Top - .Height / 2: a(3, 3) = .Name If .Top - .Height / 2 > a(4, 2) Then a(4, 1) = .Left + .Width / _ 2: a(4, 2) = .Top - .Height / 2: a(4, 3) = .Name End With Next i [Start].Offset(1, 1).Resize(4, 3) = a End Sub