Sto avendo un problema con un errore 1004 "Application-defined or Object-defined error" quando si seleziona un intervallo.
Sono ancora in grado di selezionare le righe (cioè Rows("21:21").select
) e di selezionare intervalli in altri fogli della stessa cartella di lavoro. Non credo che l'errore sia nel codice. Forse è qualche impostazione di cui non sono a conoscenza?
Ho usato lo stesso identico codice molte volte prima, ma per qualche motivo non riesco a farlo funzionare in questa sub (ho commentato dove si verifica l'errore)...
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
Ho bisogno di diventare fantasioso nella mia copia, poiché la quantità di righe cambierà frequentemente. Di nuovo, il codice seguente è stato usato prima senza errori... ma non in questo 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
Forse il tuo codice è dietro il foglio1, quindi quando cambi il focus sul foglio2 gli oggetti non possono essere trovati? Se questo è il caso, specificare semplicemente il foglio di lavoro di destinazione potrebbe aiutare:
Sheets("Sheet1").Range("C21").Select
Non ho molta familiarità con il funzionamento di Select perché cerco di evitarlo il più possibile :-). Puoi definire e manipolare gli intervalli senza selezionarli. Inoltre è una buona idea essere espliciti su tutto ciò a cui si fa riferimento. In questo modo, non si perde traccia se si passa da un foglio o cartella di lavoro ad un altro. Prova questo:
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
È un po' tardi ma potrebbe essere utile per il futuro. Ho appena avuto lo stesso problema e penso che sia perché la macro è registrata a livello di foglio di lavoro. Clicca con il tasto destro del mouse sul nodo moduli nella finestra del progetto VBA, clicca su inserisci modulo poi incolla la tua macro nel nuovo modulo (assicurati di cancellare quella registrata a livello di foglio di lavoro).
Spero che questo aiuti.
Alcune operazioni in Excel sono limitate dalla memoria disponibile. Se si ripete lo stesso processo più e più volte potrebbe produrre un overflow di memoria ed Excel non sarà più in grado di ripeterlo. Questo mi è successo mentre cercavo di creare diversi fogli nella stessa cartella di lavoro.