Файлы к уроку:
Описание
Изначально все графики расположены хаотично. Мы хотим, чтобы все графики были одного размера и располагались друг за другом и друг под другом.

После применения макроса графики будут выглядеть так. Макрос позволит нам выбрать нужное количество столбцов. В данном примере визуализации располагаются в 2 столбца.

Решение
Сначала укажем, что произойдет, если пользователь не выбрал график для образца.
Дальше укажем, что произойдет, если пользователь не указал количество столбцов.
Sub size_align()
Dim intWidth As Integer
Dim intHeight As Integer
Dim intY As Integer
Dim intX As Integer
Dim intCols As Integer
If Application.ActiveChart Is Nothing Then
MsgBox "Сначала нужно выбрать график для образца."
Exit Sub
End If
On Error Resume Next
intCols = InputBox("Сколько должно быть столбцов?")
If Err.Number <> 0 Then
MsgBox "Количество столбцов указано неверно."
Exit Sub
End If
If intCols < 1 Then Exit Sub
On Error GoTo 0
intWidth = Application.ActiveChart.Parent.width
intHeight = ActiveChart.Parent.Height
intY = 10
intX = 400
For i = 1 To Application.ActiveSheet.ChartObjects.Count
With Application.ActiveSheet.ChartObjects(i)
.width = intWidth
.Height = intHeight
.Left = intX + ((i - 1) Mod intCols) * intWidth
.Top = intY + Int((i - 1) / intCols) * intHeight
End With
Next i
End Sub
Примененные функции
- Application.ActiveChart
- Application.ActiveChart.Parent.width
- Application.ActiveChart.Parent.Height
- Err.Number
- Mod
- On Error GoTo 0
- On Error Resume Next