Αναγν. άρθρου: 210684 - Τελευταία αναθεώρηση: Δευτέρα, 19 Σεπτεμβρίου 2011 - Αναθεώρηση: 5.0

Αντιγραφή φύλλου εργασίας μέσω προγραμματισμού προκαλεί σφάλμα χρόνου εκτέλεσης 1004 στο Excel

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Στο Microsoft Excel, μπορείτε να εκτελέσετε μια μακροεντολή που αντιγράφει τα φύλλα εργασίας και στη συνέχεια τοποθετεί τα φύλλα εργασίας στο ίδιο βιβλίο εργασίας από το οποίο προήλθε. Όταν το κάνετε αυτό, ενδέχεται να λάβετε ένα μήνυμα λάθους παρόμοιο με ένα από τα ακόλουθα μηνύματα λάθους:
Σφάλμα χρόνου εκτέλεσης '1004':
Μέθοδος αντίγραφο του φύλλου εργασίας κλάσης απέτυχε
Σφάλμα χρόνου εκτέλεσης '1004':
Εφαρμογή ή αντικείμενο σφάλματος

Αιτία

Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, ρητή ή σιωπηρή. Αυτό περιλαμβάνει αλλά δεν περιορίζεται σε σιωπηρών εγγυήσεων εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία και τον εντοπισμό σφαλμάτων διαδικασιών. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες ούτε θα δημιουργήσουν διαδικασίες για να ικανοποιεί συγκεκριμένες απαιτήσεις σας.

Αυτό το ζήτημα μπορεί να προκύψει όταν δίνετε ένα καθορισμένο όνομα στο βιβλίο εργασίας και στη συνέχεια αντιγράψτε το φύλλο εργασίας πολλές φορές χωρίς πρώτα να αποθηκεύσετε και να κλείσετε το βιβλίο εργασίας, όπως στο ακόλουθο δείγμα κώδικα:
Sub CopySheetTest()
    Dim iTemp As Integer
    Dim oBook As Workbook
    Dim iCounter As Integer
    
    ' Create a new blank workbook:
    iTemp = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set oBook = Application.Workbooks.Add
    Application.SheetsInNewWorkbook = iTemp
    
    ' Add a defined name to the workbook
    ' that RefersTo a range:
    oBook.Names.Add Name:="tempRange", _
        RefersTo:="=Sheet1!$A$1"
            
    ' Save the workbook:
    oBook.SaveAs "c:\test2.xls"
    
    ' Copy the sheet in a loop. Eventually,
    ' you get error 1004: Copy Method of
    ' Worksheet class failed.
    For iCounter = 1 To 275
        oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)        
    Next
End Sub
				

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτό το ζήτημα, αποθηκεύστε και κλείστε το βιβλίο εργασίας περιοδικά όσο υφίσταται διαδικασία αντιγραφής, όπως στο ακόλουθο δείγμα κώδικα:
Sub CopySheetTest()
    Dim iTemp As Integer
    Dim oBook As Workbook
    Dim iCounter As Integer
    
    ' Create a new blank workbook:
    iTemp = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set oBook = Application.Workbooks.Add
    Application.SheetsInNewWorkbook = iTemp
    
    ' Add a defined name to the workbook
    ' that RefersTo a range:
    oBook.Names.Add Name:="tempRange", _
        RefersTo:="=Sheet1!$A$1"
            
    ' Save the workbook:
    oBook.SaveAs "c:\test2.xls"
    
    ' Copy the sheet in a loop. Eventually,
    ' you get error 1004: Copy Method of
    ' Worksheet class failed.
    For iCounter = 1 To 275
        oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
        'Uncomment this code for the workaround:
        'Save, close, and reopen after every 100 iterations:
        If iCounter Mod 100 = 0 Then
            oBook.Close SaveChanges:=True
            Set oBook = Nothing
            Set oBook = Application.Workbooks.Open("c:\test2.xls")
        End If
    Next
End Sub
				
ΣΗΜΕΙΩΣΗ Πόσες φορές μπορείτε να αντιγράψετε ένα φύλλο εργασίας, πρέπει να αποθηκεύσετε το βιβλίο εργασίας ποικίλλει ανάλογα με το μέγεθος του φύλλου εργασίας.

Εναλλακτικός τρόπος αντιμετώπισης

Για να επιλύσετε αυτό το ζήτημα, εισαγάγετε ένα νέο φύλλο εργασίας από ένα πρότυπο, αντί να αντιγράψετε ένα υπάρχον φύλλο εργασίας. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα, ανάλογα με την έκδοση του Excel που εκτελείτε.

Microsoft Office Excel 2007

  1. Δημιουργήστε ένα νέο βιβλίο εργασίας και κατόπιν διαγράψτε όλα τα φύλλα εργασίας εκτός για μία.
  2. Μορφοποιήστε το βιβλίο εργασίας και στη συνέχεια προσθέστε τυχόν κείμενο, δεδομένα και γραφήματα που πρέπει να έχετε στο πρότυπο από προεπιλογή.
  3. Κάντε κλικ στην επιλογή του Κουμπί Microsoft Office, και στη συνέχεια κάντε κλικ στο κουμπί Αποθήκευση ως.
  4. Με το Όνομα αρχείου Πληκτρολογήστε το όνομα που θέλετε για το πρότυπο του Excel.
  5. Με το Αποθήκευση ως τύπου λίστα, κάντε κλικ στο κουμπί Πρότυπο (*.xltx), και στη συνέχεια κάντε κλικ στο κουμπί Αποθήκευση.
  6. Για να εισαγάγετε το πρότυπο μέσω προγραμματισμού, χρησιμοποιήστε τον ακόλουθο κώδικα:
    Τύπος sheets.Add: =Διαδρομή\FileName
    Σε αυτόν τον κώδικα, Διαδρομή\FileName είναι μια συμβολοσειρά που περιέχει την πλήρη διαδρομή και το όνομα για το πρότυπο φύλλο.

Microsoft Office Excel 2003 και σε παλαιότερες εκδόσεις του Excel

  1. Δημιουργήστε ένα νέο βιβλίο εργασίας και κατόπιν διαγράψτε όλα τα φύλλα εργασίας εκτός για μία.
  2. Μορφοποιήστε το βιβλίο εργασίας και στη συνέχεια προσθέστε τυχόν κείμενο, δεδομένα και γραφήματα που πρέπει να έχετε στο πρότυπο από προεπιλογή.
  3. Κάντε κλικ στο κουμπί Το αρχείο, και στη συνέχεια κάντε κλικ στο κουμπί Αποθήκευση ως.
  4. Με το Όνομα αρχείου Πληκτρολογήστε το όνομα που θέλετε για το πρότυπο του Excel.
  5. Με το Αποθήκευση ως τύπου λίστα, κάντε κλικ στο κουμπί Πρότυπο (*.xlt), και στη συνέχεια κάντε κλικ στο κουμπί Αποθήκευση.
  6. Για να εισαγάγετε το πρότυπο μέσω προγραμματισμού, χρησιμοποιήστε τον ακόλουθο κώδικα:
    Τύπος sheets.Add: =Διαδρομή\FileName
    Σε αυτόν τον κώδικα, Διαδρομή\FileName είναι μια συμβολοσειρά που περιέχει την πλήρη διαδρομή και το όνομα για το πρότυπο φύλλο.

Κατάσταση

Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2010
Λέξεις-κλειδιά: 
kbprogramming kbmacro kbautomation kbvba kbexpertiseinter kbbug kberrmsg kbpending kbmt KB210684 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:210684  (http://support.microsoft.com/kb/210684/en-us/ )