Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [VBA] Δημιουργία Μορφοποιημένου Φύλλου Εργασίας με κώδικα

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 01-06-11, 18:32
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 227
Προεπιλογή Δημιουργία Μορφοποιημένου Φύλλου Εργασίας με κώδικα

Καλησπέρα σε όλους και καλό καλοκαίρι να έχουμε.
Θέτω ένα θέμα που με απασχολεί εδώ και καιρό.Είναι η δημιουργία ενός μορφοποιημένου φύλλου εργασίας με χρήση κώδικα.
Αναλυτικότερα:Στο παράδειγμα που επισυνάπτω έχω ένα φύλλο εργασίας με τίτλο "Υπολογισμός Προσφοράς"
Πώς μπορούμε (πάντα με τη χρήση κώδικα) να δημιουργήσουμε νέα φύλλα εργασίας όπου θα είναι μία μορφοποιημένη προσφορά σε ένα πελάτη που θα την έχουμε ορίσει, ώστε να εμφανίζονται μόνο τα προιόντα που δεν έχουν μηδενική τιμή με όνομα του πρώτου φύλλου εργασίας το όνομα του πρώτου πελάτη(πχ.petrou) και τα επόμενα φύλλα με την ίδια λογική.O κώδικας να είναι αντιστοιχισμένος σε ένα κουμπί εντολής όπου θα δημιουργεί το φύλλο εργασίας με συγκεκριμένο όνομα.
Ευχαριστώ.
Συνημμένα Αρχεία
Τύπος Αρχείου: xls PRD.xls (15,5 KB, 29 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 02-06-11, 10:09
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 19-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Καλημέρα σας.

Φίλε Τζίμη,
ο κώδικας που ζητάς απλά θα ελέγχει την στήλη που θέλεις για το αν είναι ή όχι μηδέν, και ανάλογα θα αντιγράφει ή όχι τα στοιχεία που θέλεις στις θέσεις που θέλεις.

Ελπίζω να ήμουν τόσο σαφής όσο και εσύ.

Μας μιλάς για πελάτη και μορφοποιημένο φύλλο εργασίας ζητώντας κώδικα, χωρίς να μας δίνεις πληροφορίες για το πώς θα καθορίζεται ο πελάτης, αλλά ούτε το πώς θα είναι το μορφοποιημένο φύλλο εργασίας.
Μας ανέβασες ένα πίνακα Υπολογισμός Προσφοράς (όπου ο μόνος υπολογισμός είναι ένας πολλαπλασιασμός) και περιμένεις βοήθεια.
Μας μιλάς για επόμενα φύλλα με την ίδια λογική χωρίς να διευκρινίζεις το περιεχόμενό τους.

Αν δεν μας δώσεις τα απαιτούμενα στοιχεία δεν νομίζω ότι θα μπορέσεις να έχεις κάποια απάντηση.

Τέλος, εγώ θα έλεγα ότι μάλλον πρέπει να ελέγχει την ποσότητα και όχι την τιμή. Για σκέψου το λίγο. Υπάρχουν και προϊόντα που ενώ έχουν ποσότητα δεν έχουν τιμή, γιατί ίσως είναι προσφορά του καταστήματος.

Φιλικά
Θανάσης.
Απάντηση με παράθεση
  #3  
Παλιά 02-06-11, 12:38
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 227
Προεπιλογή

Θανάση ευχαριστώ για την ανταπόκρισή σου.Ίσως να χρειάζεται να δώσω περισσότερες εξηγήσεις.Όταν λέω να δημιουργεί ένα νέο φύλλο εργασίας με βάση κάποια συγκεκριμένη μορφοποίηση εννοώ όπως πχ. αυτό στο φύλλο προσφορά.Το βασικό όμως ερώτημα παραμένει κατά πόσο μπορεί να υπάρξει κώδικας που να δημιουργεί ένα νέο φύλλο εργασίας.(αναπαραγωγή φύλλου)
Ευχαριστώ.
Συνημμένα Αρχεία
Τύπος Αρχείου: xls PRD.xls (19,0 KB, 20 εμφανίσεις)
Απάντηση με παράθεση
  #4  
Παλιά 02-06-11, 17:33
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 19-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Δεν ξέρω αν σε καταλαβαίνω Τζίμη,
Τέλος πάντων
Η γραμμή κώδικα που αντιγράφει το φύλλο "ΠΡΟΣΦΟΡΑ" σαν τελευταίο φύλλο στο βιβλίο είναι:
Sheets("ΠΡΟΣΦΟΡΑ").Copy After:=Sheets(Sheets.Count)
και η επόμενη γραμμή το μετονομάζει σε "ΠΕΛΑΤΗΣ_1"
Sheets(Sheets.Count).Name = "ΠΕΛΑΤΗΣ_1"

Θανάσης.
Απάντηση με παράθεση
  #5  
Παλιά 02-06-11, 18:19
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 227
Προεπιλογή

Θανάση θέλω αν γίνεται, με κώδικα VBA να δημιουργείτε ένα φύλλο εργασίας όπως αυτό το φύλλο ΠΡΟΣΦΟΡΑ το οποίο θα περιλαμβάνει εκείνα τα είδη που έχουν ποσότητες μη μηδενικές με βάση το πρώτο φύλλο.Το όνομα του νέου φύλλου που θα δημιουργείτε μπορεί να ορίζετε από τον κωδικα;
Απάντηση με παράθεση
  #6  
Παλιά 02-06-11, 21:37
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλησπέρα σε όλους!

Δημήτρη, το ερώτημα σου είναι κατανοητό.

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

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

Για παράδειγμα:
  • Από που θα πάρει η VBA την τιμή για να συμπληρωσει το κελί B2 στο νέο φύλλο;
  • Τι όνομα θα δοθεί στο νέο φύλλο;
  • Τι θα γίνει αν ήδη υπάρχει ήδη ένα φύλλο με το ίδιο όνομα;
  • Τι θα γίνει αν το όνομα του φύλλου δεν μπορεί να περαστεί στο νέο φύλλο
    επειδή είναι μεγάλο ή επειδή περιέχει μη επιτρεπόμενους χαρακτήρες;
Δώσε μας μια απάντηση στα παραπάνω για να μπορέσουμε να σε βοηθήσουμε.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #7  
Παλιά 02-06-11, 22:33
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 227
Προεπιλογή

Τάσο ευχαριστώ για το ενδιαφέρον.Ειδικότερα:
1)Το όνομα για το κελί Β2 να το παίρνει από ένα inputForm
2) τό όνομα του φύλλου να είναι ίδιο με το κελί Β2
3) το όνομα να είναι αποδεκτό σύμφωνα με τις αρχές τις VBA (αποδεκτοί χαρακτήρες)
4) αν υπάρχει ήδη φύλλο με το ίδιο όνομα να το αντικαθιστά με το νέο.
Απάντηση με παράθεση
  #8  
Παλιά 03-06-11, 00:14
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Γεια σου Δημήτρη!
Μετονόμασε το φύλλο "ΠΡΟΣΦΟΡΑ" σε "OfferTemplate" και απόκρυψε το.

Κατόπιν στο φύλλο "ΥΠΟΛΟΓΙΣΜΟΣ ΠΡΟΣΦΟΡΑΣ" αντιστοίχησε την ρουτίνα "NewOffer" στον παρακάτω κώδικα σε ένα κουμπί:

Κώδικας:
Option Explicit
Const ilegalChars = ":\/?*[]"

Sub NewOffer()
    Dim rng As Range, Wks As Worksheet, NewWks As Worksheet, _
        xPos As Integer, OfferName As String, SheetName As String
    Application.ScreenUpdating = False
    OfferName = VBA.InputBox("Δώσε Eπωνυμία", "Νέα προσφορά...")
    If StrPtr(OfferName) = 0 Then Exit Sub
    SheetName = CleanName(OfferName)
    xPos = NewSheetPosition(NewName:=SheetName)
    Set Wks = ActiveSheet
    Wks.Range("A:E").AutoFilter Field:=3, Criteria1:=">0", _
                                Operator:=xlAnd

    With ThisWorkbook.Worksheets("OfferTemplate")
        .Visible = xlSheetVisible
        .Copy After:=Sheets(xPos)
        .Visible = xlSheetHidden
    End With
    Set NewWks = ActiveSheet
    Set rng = Wks.AutoFilter.Range.Offset(1)
    rng.Copy
    With NewWks
        .Name = SheetName
        .Range("B1") = OfferName
        .Range("A5").PasteSpecial xlPasteValues
        .Range("A5").Select
    End With
    Wks.AutoFilterMode = False
    Application.CutCopyMode = False

End Sub

Function NewSheetPosition(NewName As String) As Integer
    Dim sh As Object, i As Integer
    For Each sh In ThisWorkbook.Sheets
        If sh.Name = NewName Then
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
        Else
            If sh.Visible Then i = i + 1
        End If
    Next
    NewSheetPosition = i
End Function

Function CleanName(strName As String) As String
    Dim i As Integer, tmpName As String
    tmpName = strName
    For i = 1 To Len(ilegalChars)
        tmpName = Replace(tmpName, Mid(ilegalChars, i, 1), "_")
    Next
    CleanName = tmpName
End Function
Καλή συνέχεια!

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

Τελευταία επεξεργασία από το χρήστη Tasos : 03-06-11 στις 10:42.
Απάντηση με παράθεση
  #9  
Παλιά 03-06-11, 11:36
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 227
Προεπιλογή

Τάσο 'ίσως να σε κούρασα.Έκανα αυτό που μου είπες.Αποτέλεσμα το πρώτο φύλλο να μου εμφανίζει τα προιόντα που θέλω, ενώ εγώ το φύλλο αυτό δε θέλω να αλλάζει.Δημιουργία άλλου νέου φύλλου σύμφωνα με την επωνυμία που θέτω στην εισαγωγική φόρμα όπου θα εμφανίζει τα προιόντα με μη μηδενική τιμή δεν έκανε.
Μήπως κάτι κάνω στραβά;
Απάντηση με παράθεση
  #10  
Παλιά 03-06-11, 11:56
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Τζίμη, δοκίμασα τον κώδικα του Τάσου και λειτουργεί μια χαρά.
Δες και το αρχείο που επισυνάπτω.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: xls CreateOffer2.xls (57,5 KB, 62 εμφανίσεις)
Απάντηση με παράθεση
Απάντηση στο θέμα

Ετικέτες
vba, φιλτράρισμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] ΑΠΟΘΗΚΕΥΣΗ ΜΕΡΟΥΣ ΦΥΛΛΟΥ ΕΡΓΑΣΙΑΣ ΣΕ CVS ΜΕ BUTTON smasak Excel - Ερωτήσεις / Απαντήσεις 8 01-12-15 13:13
[VBA] Δημιουργία Φύλλου Εργασίας με κώδικα othonas Excel - Ερωτήσεις / Απαντήσεις 3 17-05-13 08:14
[Συναρτήσεις] Ενημέρωση μιας λίστας από μια άλλη λίστα ενός άλλου φύλλου εργασίας labpanag Excel - Ερωτήσεις / Απαντήσεις 2 06-12-12 17:14
Διαδρομή βιβλίου / όνομα φύλλου εργασίας σε κελί. Tasos Κείμενο 0 21-09-11 14:34


Η ώρα είναι 07:40.