Erro em tempo de execução '1004' O método 'Linhas' de Object_Global falhou

0

Estou escrevendo código VBA para encontrar last_row da próxima planilha dentro de uma planilha de gráfico, no gráfico eu estou usando a função Chart_MouseUp e Chart_MouseDown aqui estou explicando Chart_MouseUp dentro do evento Chart_MouseDown que estou tomando Estou tomando o ponto de início do gráfico xey co ordenar ee no evento Chart_MouseUp Eu estou tomando o ponto final do gráfico xey coordenar e após este processo eu estou armazenando ponto inicial e ponto final x coordenar dentro da próxima folha coluna "AQ" para este fim eu tenho que saber o número de célula que está em branco dentro da coluna AQ para isso eu tenho que saber last_Row da célula AQ e, para esse efeito, estou usando este código

           Dim last_Row As Integer
           last_Row = Sheets(5).Range("B" & Rows.count).End(xlUp).Row
           MsgBox last_Row

Erro em tempo de execução '1004'  O método 'Linhas' de Object_Global falhou

Sempre que código como

'Sheets(5).Range("AQ4") = startX
'Sheets(5).Range("AQ5") = endX

está trabalhando dentro da mesma planilha aqui está código de evento Chart_MouseUp Por favor, se você tem uma idéia para lidar com esse problema, então me guie

Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, _
        ByVal x As Long, ByVal y As Long)

    Dim ElementID As Long, Arg1 As Long, Arg2 As Long
    Dim myX As Variant, myY As Double
  With ActiveChart
        ' Pass x & y, return ElementID and Args
        .GetChartElement x, y, ElementID, Arg1, Arg2
        ' Did we click over a point or data label?
        If ElementID = xlSeries Or ElementID = xlDataLabel Then
            If Arg2 > 0 Then
                ' Extract x value from array of x values
                myX = WorksheetFunction.Index _
                    (.SeriesCollection(Arg1).XValues, Arg2)
                ' Extract y value from array of y values
                myY = WorksheetFunction.Index _
                    (.SeriesCollection(Arg1).Values, Arg2)
                     endX = CDate(myX)
                     endY = myY
                   ' Display message box with point information
                     MsgBox "X = " & startX & vbCrLf _
                    & "Y = " & startY & vbCrLf _
                    & "X = " & endX & vbCrLf _
                    & "Y = " & endY
                    'Sheets(5).Range("AQ4") = startX
                    'Sheets(5).Range("AQ5") = endX
                    Dim last_Row As Integer
                    'Dim sh As Worksheet
                    last_Row = Sheets(5).Range("B" & Rows.count).End(xlUp).Row
                    MsgBox last_Row

            End If
        End If
    End With

End Sub
    
por Dheeraj Kumar 31.12.2016 / 07:12

1 resposta

1

Explicação:

Seu problema não está totalmente claro, mas o problema parece ser que você está recebendo o erro 1004 nesta linha em seu código: last_Row = Sheets(5).Range("B" & Rows.count).End(xlUp).Row .

Se for esse o caso, e supondo que seu gráfico seja uma "Planilha de gráfico" (ou seja, uma planilha separada que contenha apenas um gráfico), e não um gráfico que esteja simplesmente incorporado em uma "planilha padrão" (ou seja, uma planilha que contém linhas e colunas), então esse erro seria esperado.

A razão para isso é que o objeto Rows não está disponível quando a Planilha ativa é uma "Planilha de gráfico", porque essa planilha não contém nenhuma linha (ou coluna). Claramente, essa "Folha de gráfico" é de fato a Folha ativa enquanto seu código está em execução, porque seu código é executado no acionamento do evento Mouse_Up do gráfico.


Resolução:

A resolução para este problema é simples. Supondo que Worksheets(5) seja uma planilha que contém linhas e colunas, substitua a linha de problema do código por essa:

last_Row = Sheets(5).Range("B" & ThisWorkbook.Worksheets(5).Rows.Count).End(xlUp).Row

Ou, uma alternativa melhor pode ser substituir a linha do problema por essas:

Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(5)
last_Row = sh.Range("B" & sh.Rows.Count).End(xlUp).Row


Nota:

Seu código está usando quatro variáveis que não foram declaradas (duas das quais não receberam nenhum valor). Isso não está relacionado ao erro 1004, mas é uma boa prática de codificação declarar variáveis antes que elas sejam usadas.

Para ajudar a evitar esse problema no futuro, você pode incluir uma instrução Option Explicit na parte superior do seu Módulo, o que forçará todas as variáveis desse Módulo a serem declaradas. Você pode ler mais sobre isso aqui .

Para fazer isso automaticamente para cada novo Módulo criado, ative essa opção no Editor do VBA: Ferramentas - > Opções - > Editor - > Requer declaração de variável

    
por 31.12.2016 / 22:34