У меня проблема с ошибкой 1004 "Application-defined or Object-defined error" при выборе диапазона.
Я все еще могу выбирать строки (т.е. Rows("21:21").select
) и выбирать диапазоны в других листах той же рабочей книги. Я не думаю, что ошибка в коде. Может быть, это какая-то настройка, о которой я не знаю?
Я уже много раз использовал точно такой же код, но по какой-то причине не могу заставить его работать в этом подпункте (я прокомментировал, где возникает ошибка)...
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
Мне нужно проявить фантазию при копировании, так как количество строк будет часто меняться. Опять же, приведенный ниже код использовался раньше без ошибок... но не в этом случае.
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
Возможно, ваш код находится за листом Sheet1, поэтому при переключении фокуса на лист Sheet2 объекты не могут быть найдены? В этом случае может помочь простое указание целевого рабочего листа:
Sheets("Sheet1").Range("C21").Select
Я не очень хорошо знаю, как работает Select, потому что стараюсь избегать его по мере возможности :-). Вы можете определять диапазоны и манипулировать ими, не выделяя их. Также это хорошая идея - быть явным во всем, на что вы ссылаетесь. Таким образом, вы не запутаетесь, если перейдете с одного листа или рабочей книги на другой. Попробуйте это:
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
Это немного поздно, но может быть полезно для будущего. У меня возникла такая же проблема, и я думаю, что это связано с тем, что макрос записан на уровне рабочего листа. Щелкните правой кнопкой мыши на узле modules в окне проекта VBA, выберите insert module, затем вставьте ваш макрос в новый модуль (убедитесь, что вы удалили макрос, записанный на уровне рабочего листа).
Надеюсь, это поможет.
Некоторые операции в Excel ограничены доступной памятью. Если повторять один и тот же процесс снова и снова, это может привести к переполнению памяти, и excel не сможет больше его повторять. Это случилось со мной при попытке создать несколько листов в одной рабочей книге.