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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 14-03-12, 20:26
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-09-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 66
Προεπιλογή Πολλαπλό άνοιγμα αρχείων και εισαγωγή δεδομένων

Το επισυναπτόμενο αρχείο περιέχει τον παρακάτω κώδικα
Κώδικας:
Sub InsertMultiData()
Dim FileArray As Variant
Dim i As Integer
Application.ScreenUpdating = False
FileArray = Application.GetOpenFilename(MultiSelect:=True)
If Not IsArray(FileArray) Then
    MsgBox "Δεν ειλέξατε αρχείο." _
         & vbLf & "Ξαναπροσπαθείστε!!!!!!!", vbInformation
    Exit Sub
End If
If IsArray(FileArray) Then
For i = LBound(FileArray) To UBound(FileArray)
Workbooks.Open FileArray(i)
Range("A8:Q8").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ThisWorkbook.Activate
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.ScreenUpdating = False
    Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
Next i
Else:
MsgBox "Επιτυχής εισαγωγή δεδομένων"
End If
End Sub
Με τον παραπάνω κώδικα ανοίγουν κάποια αρχεία προέλευσης δεδομένων , επιλέγεται μια περιοχή, αντιγράφεται και επικολλάται στο αρχείο προορισμού.
Τα ζητούμενα 2
1ον)Πως πρέπει να δομηθεί ο κώδικας ούτως ώστε το αρχείο προέλευσης των δεδομένων που ανοίγει (Workbooks.Open FileArray(i)), μετά την διαδικασία αντιγραφής και επικόλλησης να σώζεται και να κλείνει.
2ον)Επειδή η αρχή της περιοχής των δεδομένων που αντιγράφονται από τα αρχεία προέλευσης δεν είναι πάντα η περιοχή A8:Q8 ζητείται τροποποίηση του κώδικα ούτως ώστε η αρχή αυτή να προσδιορίζεται ως η περιοχή μετά τις επικεφαλίδες (Δηλ. από το επόμενο κελί μετά το κελί που έχει τιμή (Πωλητής) της στήλης Α έως τη στήλη Q).


Περιμένοντας τη βοήθειά σας, σας ευχαριστώ εκ των προτέρων.

Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: xls MultiData.xls (40,5 KB, 43 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 15-03-12, 13:42
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από Flashgordon61 Εμφάνιση μηνυμάτων
Τα ζητούμενα 2
1ον)Πως πρέπει να δομηθεί ο κώδικας ούτως ώστε το αρχείο προέλευσης των δεδομένων που ανοίγει (Workbooks.Open FileArray(i)), μετά την διαδικασία αντιγραφής και επικόλλησης να σώζεται και να κλείνει.
2ον)Επειδή η αρχή της περιοχής των δεδομένων που αντιγράφονται από τα αρχεία προέλευσης δεν είναι πάντα η περιοχή A8:Q8 ζητείται τροποποίηση του κώδικα ούτως ώστε η αρχή αυτή να προσδιορίζεται ως η περιοχή μετά τις επικεφαλίδες (Δηλ. από το επόμενο κελί μετά το κελί που έχει τιμή (Πωλητής) της στήλης Α έως τη στήλη Q).
Γιώργο για το πρώτο ερώτημα χωρίς να ασχοληθούμε με την βελτιστοποίηση του κώδικα:

α) Πρόσθεσε στην Sub InsertMultiData() την δήλωση
Dim wbk As Workbook

β) Αντικατάστησε την Workbooks.Open FileArray(i) με την
Set wbk = Application.Workbooks.Open(FileArray(i))

γ) Πριν την Next i πρόσθεσε τις παρακάτω δύο γραμμές
Application.CutCopyMode = False
wbk.Close

Πες μας αν έγινε.

Για το δεύτερο ερώτημα, τα πράγματα είναι πιο σύνθετα το αφήνω λοιπόν στους ειδικούς
Θανάσης
Απάντηση με παράθεση
  #3  
Παλιά 15-03-12, 17:52
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-09-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 66
Προεπιλογή

Θανάση σ' εχαριστώ.
Επειδή εκτελώντας τον κώδικα μου προτείνεται αν θέλω να σώσω η όχι τα αρχεία προέλευσης προσθέτοντας ανάμεσα στο Application.CutCopyMode = False & το wbk.Close το wbk.Save η το Application.DisplayAlerts = False ο κώδικας μετά δουλεύει απόλυτα.

Και πάλι σ' ευχαριστώ

Γιώργος
Απάντηση με παράθεση
  #4  
Παλιά 15-03-12, 18:30
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Γιώργο, αντικατέστησε τις γραμμές κώδικα :

1. Τη γραμμή: Dim i As Integer με την: Dim i As Integer, J as Long

2. την: Range("A8:Q8").Select με τις γραμμές:

j = WorksheetFunction.Match("Πωλητής", Range("A:A")) + 1

Range(Cells(j, 1), Cells(j, 17)).Select.

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #5  
Παλιά 15-03-12, 18:41
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.030
Προεπιλογή

Καλησπέρα!

Θα πρέπει να αποφεύγουμε τα Copy-Paste (αν μας ενδιαφέρουν μόνο τα δεδομένα μιας περιοχής)
καθώς και τα Select και Activate μέσα στον κώδικα. Υπάρχουν άλλες μεθόδοι που είναι πιο αποδοτικές.

Το συνημμένο παράδειγμα εισάγει δεδομένα από το πρώτο φύλλο ενός ή περισσότερων βιβλίων εργασίας.

Παράλληλα αν θελήσει ο χρήστης, μπορεί κάνοντας κλικ σε Checkbox που υπάρχει στο φύλλο
Total Data να ενεργοποιήσει την καταγραφή της διαδρομής των αρχείων στο φύλλο Log
και να αποκλείσει έτσι την εισαγωγή τους για δεύτερη φορά.

Φιλικά

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: xls xlImportWorksheets.xls (50,5 KB, 249 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

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

Παράθεση:
Αρχική Δημοσίευση από Tasos Εμφάνιση μηνυμάτων
...
Θα πρέπει να αποφεύγουμε τα Copy-Paste (αν μας ενδιαφέρουν μόνο τα δεδομένα μιας περιοχής)
καθώς και τα Select και Activate μέσα στον κώδικα. Υπάρχουν άλλες μεθόδοι που είναι
...
Το ήξερα ότι θα πυροβολήσεις πάλι για αυτό και εγώ εσκεμμένα δεν πρότεινα τίποτα από όλα αυτά και το άφησα στους ειδικούς
Η πρότασή μου είχε Dim, Set, Application και Close. ούτε Select ούτε τίποτα άλλο κακό !!!

Τα λέμε
Θ.
Απάντηση με παράθεση
  #7  
Παλιά 15-03-12, 20:31
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-09-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 66
Προεπιλογή

Σας ευχαριστώ όλους
Ειδικά τον Διαχειριστή του Forum μας τον Τάσο που πέρα από την λύση του προβλήματος μας δίνει και τον σωστό τρόπο σκέψης για την σύνταξη του κώδικα, και όχι μόνο.
Πολύ διδακτικό !!!!!!!!!!!!
Και πάλι σας ευχαριστώ

Γιώργος
Απάντηση με παράθεση
  #8  
Παλιά 13-06-12, 13:17
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 31-12-2009
Περιοχή: ΜΥΤΙΛΗΝΗ
Μηνύματα: 29
Προεπιλογή

καλησπερα σε όλους


Θα ήθελα την βοηθεια σας οσον αφορά το πρόγραμμα του αγαπητου Τάσο " xlImportWorksheets ". Γίνετε να μην ειναι απαραιτητα η επικεφαλιδα Πωλητής - Ημερομηνία - Πελάτης -Data 1- κ.λ.π. Δηλ σε ολα τα αλλα αρχεια δεν μπορεί να ειναι αλλη επικεφαλίδα με αλλα ονόματα ????


Ευχαριστώ Γρηγόρης
Απάντηση με παράθεση
  #9  
Παλιά 16-06-12, 12:22
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.030
Προεπιλογή

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

Αγαπητέ Γρηγόρη,
η λύση και η λογική του συγκεκριμένου αρχείου βασίζεται στο ζητούμενο του θέματος όπου περιέχεται.

Αν θέλεις δημιούργησε ένα νέο θέμα στο φόρουμ και περίγραψε μας το ζητούμενο σου.

Φιλικά

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


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Συναρτήσεις] Πολλαπλό φιλτράρισμα και διαγραφή δεδομένων pm4698 Excel - Ερωτήσεις / Απαντήσεις 6 28-02-14 13:30
Ενσωμάτωση αρχείων απο outlook σε βάση δεδομένων γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 8 15-02-14 15:11
Άνοιγμα αρχείων μέσω cmd button από φόρμα στην access γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 19 25-11-13 16:32
Εισαγωγή πολλαπλών αρχείων Excel στην Access prittpritt Access - Ερωτήσεις / Απαντήσεις 5 16-02-13 20:30
Άνοιγμα μιας φόρμας από μια άλλη φόρμα και ταυτόχρονη εισαγωγή κάποιων πεδίων soc07 Access - Ερωτήσεις / Απαντήσεις 19 19-03-11 09:05


Η ώρα είναι 06:30.