Erro de execução do VBA 1004 "erro definido pela aplicação ou por objecto" ao seleccionar o intervalo

estou a ter um problema com um erro 1004 "erro definido por aplicação ou por objecto" ao seleccionar um intervalo.

Ainda sou capaz de seleccionar linhas (ie Rows("21:21").select) e seleccionar intervalos noutras folhas do mesmo livro de trabalho. Não acredito que o erro esteja no código. Talvez seja algum cenário que desconheço?

já usei o mesmo código muitas vezes antes, mas por alguma razão não consigo fazê-lo funcionar neste sub (comentei onde o erro ocorrer)...

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer

    'Finds last row of content
    Windows("Excel.xlsm").Activate
    Sheets("Sheet1").Activate
    Range("C21").Select
         '>>>Error 1004 "Application-defined or Object-defined error" Occurs
    Selection.End(xlDown).Select
    CLastFundRow = ActiveCell.Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Range("A21:C" & CLastFundRow).Select
    Selection.Copy
    'Paste Data Values
    Sheets("PalTrakExport PortfolioAIdName").Select
    Range("A21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Bring back to top of sheet for consistancy
    Range("A21").Select
    Range("A1").Select
End Sub

preciso de ficar todo Janota na minha cópia, pois a quantidade de linhas irá mudar com frequência. Mais uma vez, o código abaixo foi usado antes, sem erro... mas não neste caso.

Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer

'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
     '>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
Author: MackM, 2013-08-01

16 answers

Talvez o seu código esteja por detrás da Sheet1, por isso, quando muda o foco para Sheet2, os objectos não podem ser encontrados? Se for esse o caso, basta especificar a sua folha de cálculo alvo pode ajudar:
Sheets("Sheet1").Range("C21").Select

Não estou muito familiarizado com a forma como a Select funciona porque tento evitá-la tanto quanto possível: -). Você pode definir e manipular os intervalos sem selecioná-los. Também é uma boa ideia ser explícito sobre tudo o que se refere. Dessa forma, você não perde a noção se você for de uma folha ou livro de trabalho para outro. Tenta isto.

Option Explicit

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer
    Dim wksSource As Worksheet, wksDest As Worksheet
    Dim rngStart As Range, rngSource As Range, rngDest As Range

    Set wksSource = ActiveWorkbook.Sheets("Sheet1")
    Set wksDest = ActiveWorkbook.Sheets("Sheet2")

    'Finds last row of content
    CLastFundRow = wksSource.Range("C21").End(xlDown).Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Set rngSource = wksSource.Range("A2:C" & CLastFundRow)

    'Paste Data Values
    Set rngDest = wksDest.Range("A21")
    rngSource.Copy
    rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'Bring back to top of sheet for consistancy
    wksDest.Range("A1").Select

End Sub
 18
Author: Frank H., 2013-07-31 22:58:30
É um pouco tarde, mas pode ser útil para futuras referências. Eu tinha acabado de ter o mesmo problema e eu acho que é porque a macro é gravada no nível da planilha. Carregue com o botão direito no nó dos módulos da janela do projecto VBA, carregue em Inserir módulo e cole a sua macro no novo módulo (certifique-se que apaga o gravado ao nível da folha de trabalho). Espero que isto ajude.
 9
Author: Kam, 2014-05-30 04:58:39
Aconteceu-me o mesmo. No meu caso, a maioria da planilha estava em Modo Protegido (embora as células relevantes para a macro foram desbloqueadas). Quando eu desativei a proteção na planilha, a macro funcionou fine...it parece que o VBA não gosta de células bloqueadas, mesmo que não sejam usadas pela macro.
 5
Author: Emily, 2014-05-30 12:38:15
Algumas operações no Excel são limitadas pela memória disponível. Se você repetir o mesmo processo vezes sem conta ele pode produzir um excesso de memória e o excel não será capaz de repeti-lo mais. Isso aconteceu comigo enquanto tentava criar várias folhas no mesmo livro de trabalho.
 2
Author: Dave, 2014-03-29 14:14:08

Você pode receber uma mensagem de erro" Run-time error 1004 " quando você programaticamente definir uma cadeia de array grande para um intervalo no Excel 2003

No Office Excel 2003, quando você programaticamente definir um valor de intervalo com um array contendo uma cadeia de caracteres grande, você pode receber uma mensagem de erro semelhante ao seguinte:

Erro de execução '1004'. Erro definido pela aplicação ou pela operação.

Este problema pode ocorrer se uma ou mais células de uma matriz (range of cells) contain a character string that is set to contain more than 911 characters.

Para trabalhar em torno deste problema, edite o script de modo que nenhuma célula no array contém uma cadeia de caracteres que contém mais de 911 caracteres.

Por exemplo, a seguinte linha de código do bloco de exemplo abaixo define uma cadeia de caracteres que contém 912 caracteres:

Sub XLTest()
Dim aValues(4)

  aValues(0) = "Test1"
  aValues(1) = "Test2"
  aValues(2) = "Test3"

  MsgBox "First the Good range set."
  aValues(3) = String(911, 65)

  Range("A1:D1").Value = aValues

  MsgBox "Now the bad range set."
  aValues(3) = String(912, 66)
  Range("A2:D2").Value = aValues

End Sub

Outras versões do Excel ou free alternativas Como Calc deve trabalhar também.

 2
Author: Cees Timmerman, 2016-05-30 11:19:28

Tive um problema semelhante e corrigi-o aplicando estes passos:

  1. Desprotegir a folha que quero editar
  2. alterando o intervalo que tinha seleccionado por cada célula do intervalo (explodiu)
Espero que isto ajude alguém.
 1
Author: Fabian, 2016-08-09 04:47:54

Eu poderia remover o erro (Erro de tempo de execução '1004'. Erro definido por aplicação ou operação) definindo os contadores como únicos

 1
Author: Rolf, 2017-01-06 12:47:24

Eu tinha um problema semelhante,mas acontece que eu estava apenas a referir-me a uma célula que estava fora da página {ou seja, células(i, 1).células cortadas (i-1,2)}

 1
Author: WannabeProger, 2017-03-20 15:07:57

Você tem que ir para a folha de db para obter a primeira linha em branco, você poderia tentar este método.

Sub DesdeColombia ()    
  Dim LastRowFull As Long

  'Here we will define the first blank row in the column number 1 of sheet number 1:
  LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row

  'Now we are going to insert information
  Sheet1.Cells(LastRowFull, 1).Value = "We got it"    
End Sub
 1
Author: Alex Merlano, 2018-07-05 07:16:31
Tive um problema semelhante quando tentei entrar em cada folha de um livro. Para resolvê-lo, Fiz algo assim.
dim mySheet as sheet

for each mysheet in myWorkbook.sheets

    mySheet.activate
    activesheet.range("A1").select

    with Selection
    'any wanted operations here
    end with

next
E funcionou muito bem. Espero que consiga adaptá-lo na sua situação.
 0
Author: user6292909, 2016-05-04 22:23:17
Encontrei o mesmo problema e descobri que o indivíduo que criou a planilha tinha várias colunas fechadas. Removi a protecção e tudo funcionou como planeado.
 0
Author: Chris Cooksey, 2017-02-20 18:04:32

Também tenho o mesmo problema e resolvi por baixo.
em macro tem uma variável chamada número de linha e inicialmente eu defini-la como zero. este é o erro porque nenhuma folha do excel contém número de linha como zero. quando eu definir como 1 e aumentar o que eu quero.
agora está a funcionar bem.

 0
Author: Singaravelan, 2018-02-14 05:16:53
Também tive um problema semelhante. Depois de copiar e colar para uma folha, queria que a célula cursor/ seleccionada fosse A1 e não o intervalo em que acabei de colar.
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet("A1").Select

Mas tive um erro de 400 que foi na verdade um erro de 1004

Tem de activar a folha antes de mudar a célula seleccionada isto funcionou

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet.Activate
wkSheet("A1").Select
 0
Author: Dave Pile, 2018-04-07 11:10:36

Você precisa descobrir a razão real para este código de erro comum: 1004. Edite a sua função/código VBA e execute o seu programa no modo de depuração para identificar a linha que o está a causar. E então, adicione abaixo um pedaço de código para ver o erro,

On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

Nota: Depurar as teclas de atalho que uso no PC: Passo Em (F8), Passo Em Frente (Shift + F8), Passo Em Frente (Ctrl + Shift + F8)

 0
Author: Bhuvanesh Mani, 2018-04-16 04:08:23
Já tive o mesmo problema e quase enlouqueci. A solução foi bastante inesperada.

O Meu Excel é enviado por defeito para que eu introduza fórmulas numa célula do Excel como se segue:

=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example

Note-se que os parâmetros estão separados por ponto e vírgula;. Agora, se você colar exatamente esse texto em uma fórmula dentro do VBA, por exemplo como:

Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work

Vais ter este erro 1004 sem qualquer explicação. Passei horas a depurar isto.. Tudo o que tens de fazer é ... substituir todo o ponto e vírgula por vírgulas.

Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
 0
Author: Zim84, 2018-07-05 05:55:04

Pode usar o seguinte código (por exemplo, se alguém quisesse copiar os dados das células de Sheet2 a Sheet1).

Sub Copy
Worksheets("Sheet1").Activate                    
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
 0
Author: parpaei, 2018-07-05 07:58:45