Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Tips & Tricks (https://www.ms-office.gr/forum/excel-tips-tricks/)
-   -   [VBA] Αυτόματη αντιγραφή φύλλου Excel σε νέο βιβλίο (https://www.ms-office.gr/forum/excel-tips-tricks/1770-aytomati-antigrafi-filloy-excel-se-neo-biblio.html)

Tasos 02-04-12 17:51

Αυτόματη αντιγραφή φύλλου 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



Η ώρα είναι 09:02.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2