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
16 answers
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
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.
Tive um problema semelhante e corrigi-o aplicando estes passos:
- Desprotegir a folha que quero editar
- alterando o intervalo que tinha seleccionado por cada célula do intervalo (explodiu)
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
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)}
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
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.
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.
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
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)
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
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