Mam problem z Error 1004 "Application-defined or Object-defined error" podczas wybierania zakresu.
Nadal jestem w stanie wybierać wiersze (tj. Rows("21:21").select
) i wybierać zakresy w innych arkuszach tego samego skoroszytu. Nie wierzę, że błąd jest w kodzie. Może jest to jakieś ustawienie, którego nie jestem świadomy?
Używałem dokładnie tego samego kodu wiele razy wcześniej, ale z jakiegoś powodu nie mogę sprawić, aby działał w tym subiekcie (skomentowałem, gdzie występuje błąd)...
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
Muszę uzyskać wszystkie fantazyjne w moim kopiowaniu, ponieważ ilość wierszy będzie się często zmieniać. Ponownie, poniższy kod był używany wcześniej bez błędu... ale nie w tym przypadku.
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
Być może twój kod znajduje się za Arkuszem1, więc kiedy zmieniasz fokus na Arkusz2, obiekty nie mogą zostać znalezione? Jeśli tak jest, może pomóc proste określenie docelowego arkusza:
Sheets("Sheet1").Range("C21").Select
Nie jestem zbyt dobrze zaznajomiony z tym, jak działa Select, ponieważ staram się unikać go tak bardzo, jak to tylko możliwe :-). Możesz definiować i manipulować zakresami bez ich zaznaczania. Dobrym pomysłem jest również wyraźne określenie wszystkiego, do czego się odnosisz. W ten sposób nie stracisz orientacji, gdy będziesz przechodził z jednego arkusza lub skoroszytu do drugiego. Spróbuj tego:
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
Jest to trochę spóźnione, ale może być pomocne w przyszłości. Właśnie miałem ten sam problem i myślę, że jest to spowodowane tym, że makro jest nagrywane na poziomie arkusza. Kliknij prawym przyciskiem myszy na węzeł moduły w oknie projektu VBA, kliknij na wstaw moduł, a następnie wklej swoje makro do nowego modułu (upewnij się, że usunąłeś to, które jest nagrane na poziomie arkusza).
Mam nadzieję, że to pomoże.
Niektóre operacje w Excelu są ograniczone dostępną pamięcią. Jeśli będziesz powtarzać ten sam proces w kółko, może to spowodować przepełnienie pamięci i Excel nie będzie w stanie już tego powtórzyć. Zdarzyło mi się to podczas próby utworzenia kilku arkuszy w tym samym skoroszycie.