Jump to content

Recommended Posts

Posted (edited)

Amigos.

Deparo-me com um problema num gráfico e preciso de ajuda para o resolver.

O problema:

No Userform1, tenho um Multipage, contendo um dos separadores, 6 Checkbox em que cada uma seleciona um determinado tipo de dados.

Selecionando a Checkbox 1, os dados são exibidos por sexo, em labels num outro separador do mesmo Multipage e transpostos para a folha 7 do livro.

Nas celulas A2 até A19, os escalões etários, nas células B2 a B19 o nº de elementos masculinos e nas céculas C2 a C13 os elementos femininos.

No separador do multipage que exibe estes dados, existe uma checkbox que ao ser selecionada, abre o Userform_gráfico e elabora o gráfico desejado com base na seleção A1:C19.

Até aqui, tudo bem, os gráficos são elaborados e apresentados. A rotina que envia os dados das labels para a folha são iguais (exceto o nome das varáveis) e a rotina que elabora o gráfico é sempre a mesma e utiliza os dados que são gravados na folha.

Acontece que se selecionar a checkbox2, o eixo vertical do lado esquerdo, aparece com as divisões corretamente escalonadas (0, 1, 2, 3, 4, 5, 6, etc.). No entanto, e a rotina é a mesma, se selecionar a checkbox1, as divisões do eixo vertical, aparecem desta forma (0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, etc.). Se selecionar a checkbox 6, o eixo vertical aparece assim dividido (0,0,0,1,1,1,1,1,2,2,2,2, etc.).

A rotina, que se encontra no evento Initialize do Userform_gráfico, para elaborar o gráfico pretendido é a seguinte:

If UserForm_RegistoConsultas.CheckBox22.Value = True Then
Dim wksht As Excel.Worksheet
Dim COLUNAdupla As Excel.ChartObject

Set wksht = ThisWorkbook.Sheets("Folha7")
Set COLUNAdupla = wksht.ChartObjects.Add(170, 20, 600, 360)

'-------------- CRIAR GRÁFICO

	  With COLUNAdupla.Chart
		.ChartType = xl3DColumnClustered
		.PlotArea.Select
		.ChartArea.Select
		.SetSourceData wksht.Range("A1:C19"), PlotBy:=xlColumns
		.HasTitle = True
		.ChartTitle.Characters.Text = "UTENTES OBSERVADOS EM  " & wksht.Range("F1")
		.SeriesCollection(1).ApplyDataLabels Type:=xlValue
		.SeriesCollection(1).DataLabels.Select
		ActiveChart.ChartGroups(1).GapWidth = 15
		Selection.Format.TextFrame2.TextRange.Font.Size = 12
		Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
		Selection.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
		.SeriesCollection(2).ApplyDataLabels Type:=xlValue
		.SeriesCollection(2).DataLabels.Select
		Selection.Format.TextFrame2.TextRange.Font.Size = 12
		Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
		Selection.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 176, 80)
		.Axes(xlCategory, xlPrimary).HasTitle = True
		.Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 12
		.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "ESCALÃO ETÁRIO"
		.Axes(xlValue, xlPrimary).HasTitle = True
		.Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 12
		.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "NÚMERO DE UTENTES"
'----- FAZ RODAR O GRÁFICO SOBRE os EIXOS  -----
		wksht.Shapes(COLUNAdupla.Name).Chart.ChartArea.Format.ThreeD.RotationX = -5
		wksht.Shapes(COLUNAdupla.Name).Chart.ChartArea.Format.ThreeD.RotationY = -260
	  End With
Dim GrCOLdupla As String

 ActiveChart.Parent.Width = 600
 ActiveChart.Parent.Height = 360
On Error Resume Next
'---------------------------------------------------exporta a imagem do gráfico para a pasta
 GrCOLdupla = ThisWorkbook.Path & "\GrCOLUNAdupla.JPEG"
 ActiveChart.Export Filename:=GrCOLdupla, filtername:="JPEG"
 '--------------------------------------------------------------------------carrega grágico
 Image1.Picture = LoadPicture(GrCOLdupla)

 '-------------------------------------------------elimina o gráfico criado na folha
 COLUNAdupla.Delete
End If
End Sub

Ajudem-me a resolver este problema.

Se necessitarem da rotina que trata e transpõe os dados posso colá-la também. Só não colo já para que o tópico não fique demasiado extenso.

Grato.

M.A.

Edited by manuel antonio
Posted

Para o caso de alguém se deparar com este problema, a solução é deveras simples.

Depois de ter ficado com a cabeça em PAPas, descobri que antes de os dados serem transpostos para a folha de cálculo, o range que os vai receber, deve ser formatado para "General".

Depois ... tudo rola sobre rodas.

M. A.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.