Não é possível sem usar o VBA, mas com o VBA ele pode ser automatizado para acionar qualquer alteração no gráfico. Este código assume que o gráfico é um gráfico incorporado (incorporado em uma planilha), em oposição a uma planilha de gráficos .
- Selecione a guia
Developer
( instruções se não for mostrado ). - Selecione
Editor
. - Na janela Project, clique com o botão direito do mouse em qualquer lugar e selecione
Insert
,Module
. - Com a nova janela Module selecionada, pressione F6 (ou clique em
View
thenProperties Window
). - Altere o nome para
ChartEventModule
e feche a janela Propriedades. - Cole o seguinte código na janela
ChartEventModule
:
Código ChartEventModule:
Option Explicit
Dim chartEventClassModule As New chartEventClassModule
Private Const chartSheet = "Sheet1"
Private Const chartNumber = 1
Sub RecalculateXAxisTitlePosition()
Dim chart As chart, plot As PlotArea, axis As axis, title As AxisTitle, titleXPos As Double, titleYPos As Double
Set chart = Worksheets(chartSheet).ChartObjects(chartNumber).chart
Set plot = chart.PlotArea
Set axis = chart.Axes(xlCategory) ' xlCategory is X axis, xlValue is Y axis
' If the X axis doesn't have a title, exit out
If Not axis.HasTitle Then Exit Sub
Set title = axis.AxisTitle
' Not necessary to set font size and text each time
title.Text = "Verknadsgrad"
title.Font.Size = 12
' .Position can be xlChartElementPositionAutomatic (-4105) or xlChartElementPositionCustom (-4114)
title.Position = xlChartElementPositionCustom
' Without a title the plotarea top is 9
' With a title font size 12 the title height is 17.4, and the plotarea top is 26.4
plot.Top = 9
' The PlotArea includes the axes. The Y axis throws off our centering if we center based on the PlotArea.
titleXPos = axis.Left + (axis.Width / 2) - (title.Width / 2)
titleYPos = plot.Top + plot.Height
title.Left = titleXPos
title.Top = titleYPos
' OPTIONAL CODE
' This code sets the background fill to DiagonalDown, which ensures it goes exactly from corner to corner
With plot.Format.Fill
.Visible = msoTrue
.TwoColorGradient Style:=msoGradientDiagonalDown, variant:=1
' Green color
.ForeColor.RGB = RGB(0, 176, 0)
' Red color
.BackColor.RGB = RGB(255, 0, 0)
' Percentage to be fully red (<=15%)
.GradientStops(1).Position = 0.15
' Percentage to be fully green (>=85%)
.GradientStops(2).Position = 0.85
' Middle color (yellow), center point (50%), Transparency (0%), Point to insert into list of gradients (1)
.GradientStops.Insert RGB(255, 255, 0), 0.5, 0, 1
End With
End Sub
Sub Initialise()
Set chartEventClassModule.myChart = Worksheets(chartSheet).ChartObjects(chartNumber).chart
End Sub
Eu não gostei disso quando configurei o gradiente Eu tive que definir um ângulo estático, então eu configurei no código. Ele é definido como DiagonalDown
, que calcula automaticamente o ângulo, dependendo da proporção do gráfico.
- Certifique-se de definir as duas constantes
chartSheet
echartNumber
apropriadamente na parte superior do código. - De volta à janela Project, clique com o botão direito e crie um
Class Module
. - Usando a mesma janela de propriedades ( F6 ), defina o nome como
ChartEventClassModule
. - Cole o seguinte código na janela
ChartEventClassModule
:
Código ChartEventClassModule:
Option Explicit
' https://msdn.microsoft.com/VBA/Excel-VBA/articles/using-events-with-embedded-charts
Public WithEvents myChart As chart
Private Sub myChart_Calculate()
Call ChartEventModule.RecalculateXAxisTitlePosition
End Sub
Private Sub myChart_Resize()
Call ChartEventModule.RecalculateXAxisTitlePosition
End Sub
Private Sub myChart_SeriesChange(ByVal SeriesIndex As Long, ByVal PointIndex As Long)
Call ChartEventModule.RecalculateXAxisTitlePosition
End Sub
Este código detecta alterações no gráfico e executa novamente a função para definir o título do eixo. Infelizmente, estamos limitados nos eventos do Gráfico disponíveis .
- Na janela Project, clique duas vezes em
ThisWorkbook
e cole o seguinte código:
Código do ThisWorkbook:
Private Sub Workbook_Open()
ChartEventModule.Initialise
End Sub
- Salve a pasta de trabalho como uma pasta de trabalho habilitada para macro (.xlsm). Feche e reabra a pasta de trabalho.
Presto! Agora, em quaisquer alterações nos dados, séries ou tamanho do gráfico, será acionado um evento que faz com que ele recalcule a posição do título do eixo: