Man ir problēma ar kļūda 1004 "Lietojumprogrammas vai objekta definēta kļūda", izvēloties diapazonu.
Es joprojām varu atlasīt rindas (t. i., Rows("21:21").select
) un atlasīt diapazonus citās tās pašas darbgrāmatas lapās. Es nedomāju, ka kļūda ir kodā. Varbūt tas ir kāds man nezināms iestatījums?
Precīzi tādu pašu kodu esmu izmantojis jau vairākkārt, bet kaut kādu iemeslu dēļ nevaru panākt, lai tas darbotos šajā apakšizvēlnē (esmu komentējis, kur rodas kļūda)...
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
Man ir nepieciešams, lai kopēšana būtu ļoti izdomāta, jo rindu skaits bieži mainīsies. Atkārtoju, ka turpmāk minētais kods ir ticis lietots iepriekš bez kļūdām... bet ne šajā gadījumā.
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
Varbūt jūsu kods atrodas aiz lapas 1, tāpēc, kad fokuss tiek pārslēgts uz lapu 2, objektus nevar atrast? Tādā gadījumā varētu palīdzēt vienkārši norādīt mērķa darblapu:
Sheets("Sheet1").Range("C21").Select
Es'neesmu pārāk labi informēts par to, kā darbojas Select, jo cenšos no tā izvairīties, cik vien iespējams :-). Jūs varat definēt un manipulēt ar diapazoniem, tos neizvēloties. Turklāt ir'labi skaidri norādīt visu, uz ko atsaucaties. Tādā veidā jūs nepazaudēsiet izziņu, ja pāriet no vienas lapas vai darbgrāmatas uz citu. Izmēģiniet šo:
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
Tas's ir mazliet vēlu, bet varētu būt noderīgs turpmākai atsaucei. Man tikko bija tāda pati problēma, un es domāju, ka tas ir tāpēc, ka makro tiek ierakstīts darblapas līmenī. VBA projekta logā ar peles labo pogu noklikšķiniet uz moduļu mezgla, noklikšķiniet uz ievietot moduli, tad ielīmējiet savu makro jaunajā modulī (pārliecinieties, ka esat izdzēsis darba lapas līmenī ierakstīto).
Ceru, ka tas palīdzēs.
Dažas darbības programmā Excel ierobežo pieejamā atmiņa. Ja atkārtojat vienu un to pašu procesu atkal un atkal, var rasties atmiņas pārplūšana, un Excel vairs nespēs to atkārtot. Tā notika, mēģinot izveidot vairākas lapas vienā darbgrāmatā.