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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 03-03-11, 22:09
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή Μεταφορά δεδομένων ανάμεσα σε φύλλα

Καλησπερα παιδια, πρωτη φορα γραφω στο FORUM, το οποιο ειναι πολυ καλο, ωαρια δουλεια. Τεσπα θα ηθελα να κάνω μια ερώτηση. Εχω ενα excel και θέλω γράφωντας κατι στο Φυλλο1 στο κελί Α1 να περναει στο Φυλλο2 στην στηλη Α π.χ γραφω στο Φυλλο1 στο κελι Α1 123 θέλω να πηγαινει στο φυλλο2 στην στηλη Α και αν το κελι Α1 ειναι κενο να το γραφει εκει αλλιως να πηγαινει στο Α2 και ουτω καθ εξης..

Ευχαριστω

Τελευταία επεξεργασία από το χρήστη gr8styl : 08-03-11 στις 23:50. Αιτία: Change prefix
Απάντηση με παράθεση
  #2  
Παλιά 04-03-11, 00:33
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Φίλε Αναστάση,
για όλα υπάρχει μια αρχή, Καλώς όρισες λοιπόν στο φόρουμ μας.
Για το ερώτημά σου τώρα, αν έχω καταλάβει καλά αυτό που ζητάς είναι:
κάθε φορά που αλλάζουν τα περιεχόμενα του Φύλλο1!a1 να αντιγράφονται τα περιεχόμενα του στο πρώτο κενό κελί της στήλης Φύλλο2!a:a

Χωρίς να ξέρω ποιές είναι οι γνώσεις σου σε σχέση με την VBA και τις μακροεντολές σου λέω ότι:
Για να γίνεται αυτό αυτόματα θα πρέπει να χρησιμοποιήσεις το συμβάν Worksheet_Change. Από την άλλη, η αντιγραφή μπορεί να γίνει μόνο χρησιμοποιώντας κώδικα VBA

Ο παρακάτω κώδικας λοιπόν στο συμβάν Worksheet_change του Φύλλο1 θα σου κάνει το ζητούμενο

Πες μας αν τα κατάφερες.

Θανάσης

Κώδικας:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    With Sheets("Φύλλο2")
        .Cells(.Range("A1").End(xlDown).Row + 1, 1) = Target.Value
    End With
    Target.Select
End If
End Sub
Απάντηση με παράθεση
  #3  
Παλιά 05-03-11, 10:09
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή

Φιλε θαναση οσον αναφορα το πρωτο ερωτημα δεν εχω μεγαλη σχεση με το VBA παρ ολα αυτα ασχολουμαι με VB και μπορω να καταλααβω καποια πραγματα μενει να μαθω πως να κανω αναφορεσσε κελια που ειναι πρωτογνωρα για μενα.. καθε αρχη και δυσκολη.
Τεσπα εβαλα τον κωδικα που μου εδωσες αλλα μου χτυπαει error run time error 1004 application defined.... στο debug μου δινει το πρόβλημα στην γραμμη .Cells(.Range("A1").End(xlDown).Row + 1, 1) = Target.Value

αν κανω κατι λαθος ενημερωστε με...
ty
Απάντηση με παράθεση
  #4  
Παλιά 05-03-11, 10:32
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή

το δοκιμασα με αλλο τροπο και δουλεψε If Target.Address = "$A$1" Then
.Cells(.Range("A65536").End(xlUp).Row + 1, 1) = Target.Value

ελπιζω μην ειναι λαθός τροπος :)
Απάντηση με παράθεση
  #5  
Παλιά 05-03-11, 14:59
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Αναστάση καλησπέρα και καλωσόρισες στο φόρουμ!

Ο κώδικας σου δεν έχει κάποιο συντακτικό λάθος.

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

.....Cells(.Range("A65536") δεν θα λειτουργήσει σε 2007 αν τα κελιά έχουν ήδη φτάσει μέχρι τη γραμμή 65536.

Για να μην αντιμετωπίσεις πρόβλημα σε περίπτωση που το φύλλο "Φύλλο2" μετονομαστεί
ή το κελί A1 χρειαστεί να μετακινηθεί, δημιούργησε το όνομα "MyCell" με αναφορά το κελί
A1 (στο φύλλο "Φύλλο1") και στο συμβάν Worksheet_Change() δοκίμασε το παρακάτω:

Κώδικας:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DestinationCell As Range
    If Not Intersect(Target, Range("MyCell")) Is Nothing Then
        With Sheet2    ' Sheet2=το εσωτερικό όνομα του φύλλου (CodeName)
            'Eίναι πιο ασφαλές να χρησιμοποιούμε το εσωτερικό όνομα του φύλλου (CodeName)
            'Επίσης καλό είναι να μήν υπάρχουν εσωτερικά ονόματα που περιέχουν ελληνικούς χαραχτήρες (πχ.Φύλλο1).
            'Σ αυτή την περίπτωση μπορούμε να αλλάξουμε τα εσωτερικά ονόματα των φύλλων σε άλλα με λατινικούς χατακτήρες
            If IsEmpty(.Range("A1")) Then .Range("A1").Value = Target.Value: Exit Sub   
            'Περνάει την τιμή στο A1 αν αυτό είναι κενό

            Set DestinationCell = .Range("A" & Rows.Count).End(xlUp).Offset(1)
            If IsEmpty(DestinationCell) Then 
                DestinationCell.Value = Target.Value
            Else  'αν το τελευταίο κελί της στήλης περιέχει ήδη τιμή
                MsgBox "Destination Sheet is Full", vbInformation
            End If
        End With
        Target.Select
    End If
End Sub
Έτσι, χωρίς να χρειαστείς αλλαγές στον κώδικα μπορείς:
  • Αν χρειαστεί να μετακινήσεις το κελί "MyCell" σε οποιοδήποτε σημείο του φύλλου.
  • Να μετονομάσεις το φύλλο προορισμού σε οτιδήποτε άλλο.
  • Λιγότερο χρήσιμο. Να μην περιορίζεσαι στις 65536 εγγραφές αν βρίσκεσαι σε περιβάλλον Excel 2007 (*.xlsx)

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 05-03-11, 19:00
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Καλησπέρα σας,
όπως το κατάλαβα εγώ το προβλήμα θεώρησα ότι το ζητούμενο είναι να γράψουμε στο πρώτο κενό κελί της στήλης Α του Φύλλο2 γι'αυτό και χρησιμοποίησα xldown και όχι xlup
(Με το xlup αν το κελί Α10 είναι κενό, τότε δεν θα συμπληρωθεί ποτέ αν το Α11 δεν είναι κενό)
Το λάθος μου είναι ότι θεώρησα πως τα Α1 και Α2 ΔΕΝ είναι κενά.
Αν λοιπόν έχω καταλάβει σωστά το ζητούμενο, θα πρέπει να προστεθεί ένας έλεγχος για τα Α1 και Α2 και να χρησιμοποιηθεί xlup
Δηλαδή μέσα στην With θα έχω:
Κώδικας:
...
        If IsEmpty(.Range("A1")) Then
            .Range("A1").Value = Target.Value
        ElseIf IsEmpty(.Range("A2")) Then
            .Range("A2").Value = Target.Value
        Else
            .Cells(.Range("A1").End(xlDown).Row + 1, 1) = Target.Value
        End If
...
Από την άλλη θα ήθελα να πω ότι εγκρίνω και επαυξάνω την πρόταση χρήσης ονόματος MyCell που πρότεινε ο Τάσος. Κάνει τον κώδικα περισσότερο ανεξάρτητο, αν και υπάρχει υπάρχει εξάρτηση από το φύλλο.
Θα συμφωνήσω επίσης για το κωδικό όνομα των φύλλων σε ελληνικά, με τα οποία η VBA όχι μόνο δεν συνεργάζεται πλήρως, αλλά δημιουργεί και προβλήματα
(ένα xls φτιαγμένο σε ελληνικό Excel αν περιέχει κώδικα VBA και κατόπιν το επεξεργαστούμε με Αγγλικό Excel δεν μπορούμε να το ξαναχρησιμοποιήσουμε σε περιβάλλον με ελληνικό Excel τουλάχιστον μέχρι την έκδοση 2003)
Αυτά τα λίγα
Θανάσης.
Απάντηση με παράθεση
  #7  
Παλιά 05-03-11, 22:35
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή

Post 1:
παιδια ευχαριστω με βοηθησατε πολυ με τις απαντησεις σας.. τωρα επεξεργαζομαι ολα αυτα που ειπατε και προσθετω και αλλα... αν χρειαστω τπτ θα επανερθω! ty! :)

Post 2:
.... και επανερχομαι λοιπον αρχισα λιγο το vba μου και εκανα μια φορμα που θα περναει απο εκει τα δεδομενα (μου φενεται καλυτερο).. τωρα το προβλημα μου ειναι οτι εχω 3 textboxes οπου θα γράφω μέσα τιμές πως γινεται. Στο ΦΥΛΛΟ 1 στην στηλη Α θα εχω καποια ονοματα π.χ Α1: Παπαδοπουλος Α2: Γεωργιου παταώ πανω σε ενα ονομα και μου εμφανιζεται η φορμα που εχω δημιουργησει γραφω στα κελια τα δεδομενα μου. Ταυτοχρονα στο Φυλλο 2 στην γραμμη 1 εχω Α1: Παπαδοπουλος D1 : Γεωργιου (οπου το καθενα απο αυτα τα κελια ειναι συγχωνευση τριων κελιων) θελω τωρα π.χ οταν πατησω πανω στον παπαδοπουλο και γραψω τα δεδομενα στην φορμα να ελεγχει (μαλλον με HLOOKUP) που εχει υπαρχει αυτο το ονομα στο φυλλο 2 και οταν το βρει να συμπληρωνει (για τον παπαδοπουλο) στα κελια Α2: textbox1.text B2:textbox2.text C2:textbox3.text στην ουσια θελω με το που βρει σε ποιο ονομα βρισκεται το ονομα να συμπληρωνει στην δευτερη γραμμη για 3 κελια τα δεδομενα.. Ελπιζω να καταλαβεται τι εννοω αλλιως να δωσω αλλο παραδειγμα

Ευχαριστω!

Τελευταία επεξεργασία από το χρήστη anastasiosz : 06-03-11 στις 00:46.
Απάντηση με παράθεση
  #8  
Παλιά 06-03-11, 18:29
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή

λοιπον βαζω και το excel για να το δειτε καλυτερα το παραδειγμα ελπιζω να σας βοιηθησει περισσοτερο να καταλαβεται τι θελω να κανω.
Συνημμένα Αρχεία
Τύπος Αρχείου: xls test.xls (70,0 KB, 118 εμφανίσεις)
Απάντηση με παράθεση
  #9  
Παλιά 06-03-11, 22:25
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Αγαπητέ Αναστάση,

δεν είναι η Excel η εφαρμογή που ταιριάζει στην περίπτωση σου ειδικά όταν χρησιμοποιείς UserForm!

Αυτό που θέλεις να κάνεις γίνεται σε Access πολύ πιο εύκολα και προϋποθέτει μόνο στοιχειώδεις γνώσεις προγραμματισμού.

Αντίθετα, αυτό που θέλεις να κάνεις στην Excel, ναι μεν γίνεται αλλά πρέπει να είσαι γνώστης της
Excel τόσο στην επιφάνεια εργασίας της όσο και στον προγραμματισμό της σε επίπεδο VBA.
Δεν νομίζω ότι η Userform Αποτελεί την καλύτερη λύση.
Η επιλογή όμως είναι καθαρά δική σου και είναι φυσικά σεβαστή.

Ή αλήθεια είναι ότι δεν κατανόησα τον τρόπο που θέλεις να στήσεις τα δεδομένα σου αφού στο αρχείο σου βρήκα 4 - 5 κελιά
με κάποιες τιμές που δεν υποδηλώνουν το ζητούμενο σου (για μένα τουλάχιστον).
Βάλε μερικές τιμές στα κελιά σου καθώς και το αποτέλεσμα που επιθυμείς για να μπορέσουμε να σε βοηθήσουμε.
Επίσης με τη φόρμα δεν θα μπορείς να έχεις τον πλήρη έλεγχο των δεδομένων σου.
Λάβε υπόψη σου ότι τα πλαίσια κειμένου επιστρέφουν κείμενο που σημαίνει ότι θα πρέπει να μετατρέπονται οι τυχόν αριθμητικές τιμές τους σε αριθμό
για να μπορούν να αποθηκευτούν με σωστά στα κελιά και να μπορούν να επεξεργαστούν αν χρειαστεί.
Εκ των προτέρων σου προτείνω να χρησιμοποιήσεις τα στοιχεία της Excel (όχι τα ActiveX) κατευθείαν πάνω στο φύλλο.

Περιμένουμε νέα σου.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #10  
Παλιά 07-03-11, 00:44
Όνομα: Αναστάσιος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 03-03-2011
Μηνύματα: 10
Προεπιλογή

φιλε και συνονοματε Τασο εχεις δικίο οτι θα ηταν καλυτερα και ποιο ευκολα να δουλεψω σε access αλλα το θέμα ειναι οτι δεν μπορω να εχω προσβαση στην access και εχω μονο σε excel. Ελπιζω να το κανω οπως θελω. Αυτο που θελω να πω είναι οτι σητν ουσια θελω την φορμα για ενα ευκολο τροπο εισαγωγης δεδομενων και δεν με νοιαζει τοσο αν μπορω να επεξεργαστω αριθμητικα τα δεδομενα μου (μονο καποια sum θα χρειαστω). Δινω το excel ξανα με καποιες σημειωσεις και στα φυλλα και πανω στην φορμα που δινουν ακριβως αυτο που θελω. Περιμενω συντομα νεα απο οποιον μπορει να βοηθησει και τον ευχαριστω εκ των προτερων..
Συνημμένα Αρχεία
Τύπος Αρχείου: xls test.xls (75,0 KB, 126 εμφανίσεις)
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Συναρτήσεις] Ταυτόχρονη εισαγωγή δεδομένων σε 2 φύλλα mantarinia Excel - Ερωτήσεις / Απαντήσεις 2 28-04-15 18:40
[VBA] Μεταφορά δεδομένων από πολλά φύλλα xristos Excel - Ερωτήσεις / Απαντήσεις 2 12-04-15 21:58
[Excel07] Αυτόματη μεταφορά στοιχείων από διαφορετικά φύλλα Excel ggatzos Excel - Ερωτήσεις / Απαντήσεις 0 28-06-13 21:07
Σύγκριση πεδίων από ξεχωριστά φύλλα δεδομένων. ajulax Excel - Ερωτήσεις / Απαντήσεις 8 08-04-11 20:39


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