Usuário com melhor resposta
Macro que coloca nome nos pontos do grafico de dispersão

Pergunta
-
Ola pessoal é minha primeira vez aqui no forum e gostaria de agradecer pela atenção de todos, venho até vcs solicitar ajuda para uma macro que estou utilizando aqui, conforme dito no título ela coloca nome nos pontos do grafico de dispersão, gostaria de entender o código se alguem puder comentar as linhas do codigo me explicando o que cada comando faz desde ja agradeço, segue código abaixo:
Sub AttachLabelsToPoints()
'Dimension variables.
Dim Counter As Integer, ChartName As String, xVals As String' Disable screen updating while the subroutine is run.
Application.ScreenUpdating = False'Store the formula for the first series in "xVals".
xVals = ActiveChart.SeriesCollection(1).Formula'Extract the range for the data from xVals.
xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _
Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
Do While Left(xVals, 1) = ","
xVals = Mid(xVals, 2)
Loop'Attach a label to each data point in the chart.
For Counter = 1 To Range(xVals).Cells.Count
ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _
True
ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _
Range(xVals).Cells(Counter, 1).Offset(0, -1).Value
Next CounterEnd Sub
Respostas
-
Creio que os comentários do código devam ajudá-lo:
Sub AttachLabelsToPoints() 'Dimensionar as variáveis 'Counter: número inteiro 'ChartName: variável texto 'xVals: variável texto Dim Counter As Integer, ChartName As String, xVals As String 'Desabilitar a atualização de tela durante a execução do código Application.ScreenUpdating = False 'Armazenar a fórmula correspondente à primeira série na variável "xVals". xVals = ActiveChart.SeriesCollection(1).Formula 'Extrair o intervalo de dados da variável xVals. 'Partindo de, por exemplo =SERIES(,Plan1!$A$1:$A$5,Plan1!$B$1:$B$5,1) 'obtém como resultado: Plan1!$B$1:$B$5 xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _ Mid(Left(xVals, InStr(xVals, "!") - 1), 9))) xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1) Do While Left(xVals, 1) = "," xVals = Mid(xVals, 2) Loop 'Acrescenta o rótulo para cada um dos pontos de dado do gráfico 'Inicia o loop em 1 até o número de células do intervalo correspondente 'à variável xVals For Counter = 1 To Range(xVals).Cells.Count 'Ativa a exibição de valores do ponto do gráfico ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _ True 'Substitui o valor do ponto pelo correspondente elemento do intervalo 'correspondente à variável xVals ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _ Range(xVals).Cells(Counter, 1).Offset(0, -1).Value Next Counter End Sub
Adilson Soledade - MOS http://adilsonsoledade.blogspot.com/- Sugerido como Resposta adilsonsoledade quinta-feira, 1 de abril de 2010 01:39
- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 20 de setembro de 2012 11:34
Todas as Respostas
-
Creio que os comentários do código devam ajudá-lo:
Sub AttachLabelsToPoints() 'Dimensionar as variáveis 'Counter: número inteiro 'ChartName: variável texto 'xVals: variável texto Dim Counter As Integer, ChartName As String, xVals As String 'Desabilitar a atualização de tela durante a execução do código Application.ScreenUpdating = False 'Armazenar a fórmula correspondente à primeira série na variável "xVals". xVals = ActiveChart.SeriesCollection(1).Formula 'Extrair o intervalo de dados da variável xVals. 'Partindo de, por exemplo =SERIES(,Plan1!$A$1:$A$5,Plan1!$B$1:$B$5,1) 'obtém como resultado: Plan1!$B$1:$B$5 xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _ Mid(Left(xVals, InStr(xVals, "!") - 1), 9))) xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1) Do While Left(xVals, 1) = "," xVals = Mid(xVals, 2) Loop 'Acrescenta o rótulo para cada um dos pontos de dado do gráfico 'Inicia o loop em 1 até o número de células do intervalo correspondente 'à variável xVals For Counter = 1 To Range(xVals).Cells.Count 'Ativa a exibição de valores do ponto do gráfico ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _ True 'Substitui o valor do ponto pelo correspondente elemento do intervalo 'correspondente à variável xVals ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _ Range(xVals).Cells(Counter, 1).Offset(0, -1).Value Next Counter End Sub
Adilson Soledade - MOS http://adilsonsoledade.blogspot.com/- Sugerido como Resposta adilsonsoledade quinta-feira, 1 de abril de 2010 01:39
- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 20 de setembro de 2012 11:34
-