Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Αντιγραφή ΜΟΝΟ δεδομένων, χωρίς τύπους (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/6321-antigrafi-mono-dedomenon-xoris-tipoys.html)

caudillo 12-05-23 19:31

Αντιγραφή ΜΟΝΟ δεδομένων, χωρίς τύπους
 
Καλησπέρα σε όλους.
Σε ένα βιβλίο εργασίας δημιουργώ με κώδικα κάποιον αριθμό νέων φύλλων εργασίας με δεδομένα που υπολογίζονται από τύπους σε κάθε νέο φύλλο.
Επειδή το συγκεκριμένο βιβλίο εργασίας το χρησιμοποιώ σαν πρότυπο θα ήθελα - πιθανότατα με VBA - να δίνεται η δυνατότητα να επιλέγω ποιά φύλλα θέλω να αντιγράψω σε νέο βιβλίο και να γίνεται η αντιγραφή μόνο για την μορφοποίηση και τα δεδομένα των φύλλων αυτών, χωρίς τους τύπους που τα υπολογίζουν.
Ελπίζω να σας έδωσα να καταλάβετε τι ζητάω και να μπορέσετε να με βοήθησετε.
Καλή συνέχεια σε όλους.

ChrisGT7 12-05-23 21:43

Καλησπέρα Κώστα,

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

Δοκίμασε τον παρακάτω κώδικα να δεις αν σε καλύπτει:
Κώδικας:

Sub ANTIGRAFH()
    Dim Shts() As Variant, I As Integer, Sht As Worksheet
   
    ReDim Shts(ActiveWindow.SelectedSheets.Count - 1)
    For Each Sht In ActiveWindow.SelectedSheets
        Shts(I) = Sht.Name
        I = I + 1
    Next
    Sheets(Shts).Copy
   
    For Each Sht In ActiveWorkbook.Sheets
        Sht.UsedRange.Value = Sht.UsedRange.Value
    Next
End Sub

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

caudillo 13-05-23 18:40

Χρήστο σ' ευχαριστώ πολύ για τον κόπο σου.
Το δοκιμάζω αμέσως και επανέρχομαι...

caudillo 13-05-23 18:56

Χρήστο να σε ευχαριστήσω και πάλι για την βοήθειά σου.
Δοκίμασα τον κώδικά σου και πράγματι τα φύλλα αντιγράφονται σε νέο βιβλίο.
Αλλά σε δυο κελιά, στα οποία είχα δυο VLOOKUP οι οποίες επιστρέφουν κάποιες τιμές στο πρότυπο αρχείο, στο νέο βιβλίο και στις αντίστοιχες θέσεις εμφανίζεται #ΤΙΜΗ. Ενώ σε όλα τα υπόλοιπα κελιά που είχαν τύπους, εμφανίζονται αντιγραμμένες οι τιμές.
Αν έχεις κάποια ιδέα, καλώς. Αν όχι, εκτιμώ πολύ την βοήθειά σου.

ChrisGT7 13-05-23 21:33

Κώστα,

Έκανα μια δοκιμή με VLOOKUP() και λειτούργησε.

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

Αν υπάρχει το αποτέλεσμα είναι πάλι #ΤΙΜΗ, τότε πρέπει να ελέγξεις τη VLOOKUP().

Σε περίπτωση που δεν τα καταφέρεις, ανέβασε το αρχείο με δοκιμαστικά δεδομένα να το ελέγξω.

caudillo 14-05-23 23:44

1 Συνημμένο(α)
Καλημέρα Χρήστο.
Σ' ευχαριστώ και πάλι για το ενδιαφέρον σου.
Επειδή δεν κατάφερα να βγάλω άκρη, έφτιαξα ένα δοκιμαστικό αρχείο - με πολύ λιγότερα δεδομένα φυσικά - και το ανεβάζω.
Ελπίζω να βρεις άκρη...
Καλή συνέχεια.

ChrisGT7 15-05-23 15:53

Καλησπέρα και καλή εβδομάδα Κώστα,

Η VLOOKUP() φέρνει #ΤΙΜΗ λόγω της αδυναμίας της CELL() να επιστρέψει το όνομα του αρχείου.

Το νέο αρχείο που δημιουργείται μέσω του παραπάνω κώδικα, είναι "στον αέρα" και δεν έχει αποθηκευτεί ακόμα. Μόλις αποθηκευτεί και γίνει επαναϋπολογισμός (πατώντας F9), η CELL() θα επιστρέψει το όνομα του αρχείου.

caudillo 16-05-23 09:52

Καλημέρα Χρήστο.
Πριν από λίγο είδα το μήνυμά σου. Αν καταλαβαίνω σωστά, εκτελώ τον κώδικα που έγραψες και στην συνέχεια αποθηκεύω το αρχείο που δημιουργείται και πατάω F9.
Αν αυτή είναι η σειρά, το δοκίμασα και παραμένει το #ΤΙΜΗ. Μάλλον κάτι δεν κατάλαβα σωστά, αφού σε εσένα δούλεψε όπως αναφέρεις.
Μπορείς να μου επιβεβαιώσεις την σειρά των ενεργειών;
Ευχαριστώ πολύ.

ChrisGT7 17-05-23 00:04

Χρήστο,

Αντί να χρησιμοποιείς την CELL(), θα σου πρότεινα να βάζεις το μάθημα μέσω κώδικα στο Ε15. Το δοκίμασα και λειτούργησε. Δηλαδή:

Στην υπορουτίνα CreateSheetsFromList και κάτω από τη γραμμή κώδικα ActiveSheet.Name = c.Value, γράψε την εντολή: Range("E15").Value = c.Value.

Επίσης, εμφανίζεται σφάλμα και σταματάει ο κώδικας κατά τη δημιουργία νέου φύλλου. Σύμφωνα με το μήνυμα, η ονομασία φύλλων πρέπει να τηρεί κάποιους κανόνες και ένας από αυτούς είναι το μήκος του ονόματος πρέπει να είναι μικρότερο ή ίσο των 31 χαρακτήρων. Κάποια μαθήματα έχουν περισσότερους χαρακτήρες από 31, οπότε θα πρέπει να τα μειώσεις κάπως.

Ό,τι πρόβλημα προκύψει, με ενημερώνεις.

caudillo 17-05-23 08:44

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

Υ.Γ.: Επειδή καταλαβαίνω ότι ο χρόνος του καθενός είναι και περιορισμένος και πολύτιμος για να απασχολείται κάθε φορά με τα θέματα που αντιμετωπίζουμε όσοι θέλουμε να πετύχουμε κάτι στο Excel, αλλά δεν έχουμε τις γνώσεις, θα ήθελα, αν είναι εύκολο, να προτείνεις κάποια βιβλία ή online μαθήματα για την VBA, ώστε να μάθω κάποιες έστω βασικές γνώσεις σύνταξης και να μην απασχολώ για το παραμικρό το forum.

Καλή συνέχεια.


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

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


Search Engine Optimization by vBSEO 3.3.2