Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Tips & Tricks > [VBA] Αυτόματη αντιγραφή φύλλου Excel σε νέο βιβλίο

Excel - Tips & Tricks Συμβουλές και κόλπα για χρήστες της Microsoft Excel.
Παρακαλούμε μην εισάγετε εδώ ερωτήσεις!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 02-04-12, 18:51
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή Αυτόματη αντιγραφή φύλλου Excel σε νέο βιβλίο

Όταν η αντιγραφή ενός υπολογιστικού φύλλου σε νέο βιβλίο εργασίας αποτελεί μέρος ενός αυτοματισμού, ο παρακάτω κώδικας μπορεί να βοηθήσει:

Σενάριο:
  • Διαδρομή φακέλου για τα αρχεία προς αποθήκευση: "C:\foldername\"
  • Το όνομα του φύλλου προς αποθήκευση: "Μετρήσεις" (Κωδικό όνομα = wksValues)
  • Όνομα αποθήκευσης: "C:\foldername\" & τιμή από το κελί "A1" & τρέχουσα ημερομηνία και ώρα
  • Μορφή αρχείου: *.xlsx
Κώδικας:
Option Explicit

Sub ExportWorksheet()
    Dim wb As Workbook, wbName As String
    Const xlsxPath = "C:\foldername\"    ' Η διαδρομή του φακέλου

    If Dir(xlsxPath, vbDirectory) = vbNullString Then

        ' ειδοποιεί τον χρήστη ότι ο φάκελος δεν υπάρχει
        MsgBox "Ο φάκελος '" & xlsxPath & "' δεν υπάρχει!" & vbLf & _
               "Θα πρέπει να τον δημιουργήσετε για να συνεχίσετε.", vbExclamation
        Exit Sub    'τερματίζει τη διαδικασία

    Else
        If Trim(Range("A1")) <> vbNullString Then    ' αν το κελί A1 δεν είναι κενό
            wbName = Range("A1") & _
                          " (" & Format(Now, "dd-mm-yy hh-mm") & ")" & ".xlsx"
            'δημιουργεί το όνομα με βάση την τιμή του κελιού A1

            ' διαφορετικά (αν το κελί A1 είναι κενό)
        Else
            'δημιουργεί το όνομα με βάση τον τρέχοντα μήνα
            wbName = Format(Now, "mmmm") & _
                          " (" & Format(Now, "dd-mm-yy hh-mm") & ")" & ".xlsx"
        End If
    End If

    'αν το όνομα του αρχειου προς εξαγωγή ήδη υπάρχει τότε με εμφάνιση μηνύματος επιλογής (Ναι/Όχι)
    'αποφασίζεται από στο χρήστη η αντικατάσταση του υπάρχοντος αρχείου
    If Dir(xlsxPath & wbName, vbDirectory) <> vbNullString Then
        If MsgBox("Το αρχείο '" & wbName & "' υπάρχει ήδη στο φάκελο '" & xlsxPath & "'" & vbLf & _
                  "Θέλετε να το αντικαταστήσετε;", vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then

            '******αν ο χρήστης στο μήνυμα επιλογής (Ναι/Όχι) επιλέξει "Ναι"

            'αποτρέπει τη διακοπή εκτέλεσης του κώδικα αν προκληθεί σφάλμα.
            On Error Resume Next

            'διαγράφει το αρχείο
            Kill xlsxPath & wbName

            ' αν προκληθεί σφάλμα με το νούμερο 70 (δεν επιτρέπεται η πρόσβαση στο αρχείο προς διαγραφή)
            If Err = 70 Then
                MsgBox "Δεν είναι δυνατή η αντικατάσταση του αρχείου '" & wbName & "'" & vbLf & _
                       "επειδή χρησιμοποιείται από κάποιο πρόγραμμα ή χρήστη." _
                       & vbLf & "Η διαδικασία θα διακοπεί.", vbInformation
                Exit Sub
                ' αν προκληθεί οποιοδήποτε άλλο σφάλμα
            ElseIf Err <> 0 Then
                MsgBox "Σφάλμα " & Err & vbLf & Err.Description, vbExclamation

                'τερματίζει τη διαδικασία
                Exit Sub
            End If

        Else    '******αν ο χρήστης στο μήνυμα επιλογής (Ναι/Όχι) επιλέξει "Όχι" ή κλείσει το μήνυμα

            Exit Sub    'τερματίζει τη διαδικασία
        End If
    End If

    With Application
        'διακόπτει την ανανέωση της οθόνης μέχρι το τέλος της διαδικασίας
        .ScreenUpdating = False

        'δεν εμφανίζει το παράθυρο στην μπάρα των Windows (δεν ισχύει για παράθυρα που είναι ήδη ανοιχτά)
        .ShowWindowsInTaskbar = False

        'διακόπτει τον αυτόματο υπολογισμό της εφαρμογής
        .Calculation = xlCalculationManual

        'wksValues= το κωδικό όνομα του φύλλου προς αντιγραφή "Μετρήσεις"
        'Συνιστάται να καλούμε τα φύλλα που μας είναι γνωστά κατά τη σχεδίαση της εφαρμογής
        'με το κωδικό τους όνομα. Έτσι, τυχόν μετονομασία ή μετακίνηση του φύλλου δεν θα έχει
        'επιπτώσεις στην εκτέλεση του κώδικα αφού τό κωδικό του όνομα παραμένει ως έχει.
        'Μετονομάζουμε λοιπόν στον Project Explorer το φύλλο "Sheet1(Μετρήσεις) σε wksValues
        'Καλό είναι να κάνουμε το ίδιο και με τα υπόλοιπα φύλλα που εμπλέκονται στο έργο VBA
        
        wksValues.Copy 'Δημιουργεί αντίγραφο του φύλλου σε νέο βιβλίο

        Set wb = ActiveWorkbook

        'αποθηκεύει το βιβλίο στην προεπιλεγμένη διαδρομή
        wb.SaveAs Filename:=xlsxPath & wbName, FileFormat:=xlOpenXMLWorkbook

        'κλείνει το νέο βιβλίο
        wb.Close SaveChanges:=False

        .ShowWindowsInTaskbar = True
        'επαναφέρει τη ρύθμιση εμφανίσης των παραθύρων της εφαρμογής στην μπάρα των Windows

        .Calculation = xlCalculationAutomatic
        'επαναφέρει τον αυτόματο υπολογισμό της εφαρμογής

        .ScreenUpdating = True
        'επιτρέπει/επαναφέρει την ανανέωση της οθόνης. 

        'αν για κάποιο λόγο έχει προκληθεί σφάλμα κατά την αποθήκευση
        If Err <> 0 Then
            MsgBox "Σφάλμα " & Err & vbLf & Err.Description, vbExclamation
        Else
            ' Μήνυμα  επιτυχούς δημιουργίας του αρχείου
            MsgBox "Το αρχείο '" & wbName & "' δημιουργήθηκε στο φάκελο '" & _
                   xlsxPath & "'", vbInformation

        End If
    End With

End Sub
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 04-04-12 στις 11:38.
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι σε λειτουργία
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[VBA] Αντιγραφή φύλλου n.spiros Excel - Ερωτήσεις / Απαντήσεις 4 17-10-16 13:36
[Excel07] Αντιγραφη κελιών σε νεο βιβλιο εργασιας sotisanis Excel - Ερωτήσεις / Απαντήσεις 0 05-04-15 23:31
[VBA] VBA - Πολλαπλή Αντιγραφή ΦΥΛΛΟΥ Excel ΕΛΕΝΙΤΣΑ Excel - Ερωτήσεις / Απαντήσεις 8 20-03-15 15:15
[VBA] Αντιγραφή γραμμής σε νέο βιβλίο sotisanis Excel - Ερωτήσεις / Απαντήσεις 1 30-12-13 00:24
[Γενικά] Αντιγραφή φύλλου σε άλλο βιβλίο jimrenoir Excel - Ερωτήσεις / Απαντήσεις 1 20-05-12 22:29


Η ώρα είναι 14:37.