Amigos.
Deparo-me com um problema num gráfico e preciso de ajuda para o resolver.
Sei que o forum é mais dedicado ao Access, mas por certo os excelentes profissionais que aqui dedicam o seu tempo, sabem como lidar com VBA Excell.
O problema:
No Userform1tenho 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:
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.
Deparo-me com um problema num gráfico e preciso de ajuda para o resolver.
Sei que o forum é mais dedicado ao Access, mas por certo os excelentes profissionais que aqui dedicam o seu tempo, sabem como lidar com VBA Excell.
O problema:
No Userform1tenho 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:
- Código:
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
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.