none
Macro que coloca nome nos pontos do grafico de dispersão RRS feed

  • 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 Counter

    End Sub

     

    quarta-feira, 31 de março de 2010 20:20

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/
    quinta-feira, 1 de abril de 2010 01:07

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/
    quinta-feira, 1 de abril de 2010 01:07
  • Ola adilson obrigado por responder me ajudou muito. Abraço
    sexta-feira, 2 de abril de 2010 19:48