Έχω ένα πρόβλημα με ένα σφάλμα 1004 "Σφάλμα που ορίζεται από την εφαρμογή ή από το αντικείμενο" κατά την επιλογή ενός εύρους.
Εξακολουθώ να είμαι σε θέση να επιλέγω γραμμές (δηλαδή 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
Ίσως ο κώδικάς σας βρίσκεται πίσω από το Φύλλο1, οπότε όταν αλλάζετε την εστίαση στο Φύλλο2 τα αντικείμενα δεν μπορούν να βρεθούν; Αν συμβαίνει αυτό, ίσως βοηθήσει ο απλός προσδιορισμός του φύλλου εργασίας-στόχου σας:
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 δεν θα είναι σε θέση να την επαναλάβει πλέον. Αυτό μου συνέβη ενώ προσπαθούσα να δημιουργήσω πολλά φύλλα στο ίδιο βιβλίο εργασίας.