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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 28-09-14, 12:38
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 24-03-2012
Περιοχή: Θεσσαλονίκη
Μηνύματα: 70
Προεπιλογή Ενημερωτικά σχετικά με VBA Excel2007 - Excel2013

Με την παρούσα ανάρτηση θέλω να ενημερώσω το φόρουμ και τους φίλους του, σχετικά με τις περίεργες συμπεριφορές που έχουν παρατηρηθεί στο Excel 2013 σε αρχεία που εμπεριέχουν σύνθετους τύπους και ιδίως VBA δημιουργημένα σε Excel 2007, όπως ότι δεν ανοίγουν τα αρχεία σε εύλογο χρονικό διάστημα καθώς και ότι δεν εκτελείται ο κώδικας σε εύλογο χρονικό διάστημα (βλ. και http://www.ms-office.gr/forum/excel-...ct-values.html). Η λύση που δόθηκε ενδοεταιρικά από το τεχνικό τμήμα – λόγω και του πλήθους των αρχείων που υπάρχουν τα οποία είχαν δημιουργηθεί με το Excel 2007 – είναι η εγκατάσταση virtual excel 2007 εντός του περιβάλλοντος των win8 και με εγκατεστημένο το office 2013. Έτσι από τον windows explorer κάνοντας δεξί κλικ σε αρχείο το Excel έχει κανείς τη δυνατότητα να το ανοίξει είτε με το Excel 2013 είτε με το Excel 2007. Αυτό έλυσε το πρόβλημα της ταχύτητας εκτέλεσης του κώδικα, καθώς εντέλει συνεχίζει να εκτελείται με Excel 2007. Το θέμα με την καθυστέρηση ανοίγματος αρχείων είχε επιπρόσθετα να κάνει και με ρυθμίσεις ασφαλείας δικτύου.

Σε μεμονωμένο PC δεν γνωρίζω εάν αυτό είναι εφικτό, καθώς οι συνάδελφοι τεχνικοί, μου πρότειναν να απεγκαταστήσω το Office 2013 και να εγκαταστήσω το Office 2007, διότι το παραπάνω τέχνασμα εφαρμόστηκε ενώ μεσολαβούν και δικτυακοί servers.

(Σημείωση: εάν το θέμα δεν ανήκει στη συγκεκριμένη θεματική ενότητα, παρακαλώ τους διαχειριστές του φόρουμ να το μεταφέρουν στην ανάλογη θεματική ενότητα)

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

Καλησπέρα Δημήτρη!
Όσον αφορά το θέμα επιδόσεων, η Excel 2013 είναι σαφώς καλύτερη με την προϋπόθεση ότι ο κώδικας VBA είναι γραμμένος από χρήστη που έχει γνώσεις του αντικειμένου αυτοματοποίησης της Excel.

Δοκίμασε τον παρακάτω κώδικα (με βάση το συνημμένο που ανέβασες εδώ: http://www.ms-office.gr/forum/excel-...ct-values.html ).

Κώδικας:
Option Explicit

Sub Test()
    Dim LastRow As Long
    Dim rngTarget As Range
    Dim rngTargetKW As Range
    Dim rngSource As Range
    Dim c As Range
    Dim wb As Workbook
    Dim wksSource As Worksheet
    Dim wksTarget As Worksheet
    Dim WF As WorksheetFunction
    Dim i As Long
    Dim KW As Integer
    Dim dtDate As Date

    On Error GoTo ExitHere

    Set WF = Application.WorksheetFunction

    Set wksTarget = ThisWorkbook.Worksheets("KW_Auswahl")
    With wksTarget
        .Range("A2:E" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
        .Range("A1").Value = "KW_LJCombiNr"
        .Range("B1").Value = "Check"
        .Range("C1").Value = "KW"
        .Range("D1").Value = "Count"
        .Range("E1").Value = "Date"
    End With
    With Application
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .ShowWindowsInTaskbar = False
    End With
    Set wb = Workbooks.Open("C:\Users\Admin\Desktop\ItemsPerWeek.xlsx", ReadOnly:=True)    ' Προσάρμοσε τη διαδρομή του αρχείου
    Set wksSource = wb.Worksheets("Item List")
    LastRow = wksSource.UsedRange.Rows.Count
    With wksSource.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wksSource.Range( _
                             "C2:C" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                        xlSortNormal
        .SortFields.Add Key:=wksSource.Range( _
                             "B2:B" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                        xlSortNormal
        .SetRange wksSource.Range("A1:E" & LastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    LastRow = wksSource.Cells(wksSource.Rows.Count, 4).End(xlUp).Row
    Set rngSource = wksSource.Range("A2:E" & LastRow)
    rngSource.RemoveDuplicates Columns:=Array(2, 3), Header:=xlYes
    LastRow = wksSource.Cells(wksSource.Rows.Count, 4).End(xlUp).Row
    Set rngSource = wksSource.Range("B2:B" & LastRow)

    Set rngTarget = wksTarget.Range("A2:A" & LastRow)
    Set rngTargetKW = rngTarget.Offset(, 2)
    For Each c In rngSource
        i = i + 1
        KW = c.Value
        dtDate = c.Offset(, 1).Value
        rngTarget(i).Value = Format(KW) & " - " & Format(dtDate, "dd.MM.yyyy")
        rngTarget(i).Offset(, 1).Value = c.Value > 0
        If c.Value > 0 Then rngTarget(i).Offset(, 2).Value = c.Value
        rngTarget(i).Offset(, 3).Value = WF.CountIf(rngTargetKW, KW)
        rngTarget(i).Offset(, 4).Value = dtDate
    Next
ExitHere:
    If Err <> 0 Then
        MsgBox "Σφάλμα: " & Err.Number & vbLf & Err.Description, vbExclamation
    End If
    If Not wb Is Nothing Then
        wb.Close False
        Set wb = Nothing
    End If
    With Application
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .ShowWindowsInTaskbar = True
    End With

End Sub
Καλή συνέχεια!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #3  
Παλιά 01-10-14, 22:10
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 24-03-2012
Περιοχή: Θεσσαλονίκη
Μηνύματα: 70
Προεπιλογή

Καλησπέρα Τάσο,
Πέρασε αρκετός καιρός από τότε που είχαμε μιλήσει. Εύχομαι να είσαι καλά.
Την ανάρτηση σου την είδα σήμερα μόλις τώρα και σαφώς έσπευσα να το δοκιμάσω με αποτέλεσμα να διαπιστώσω ότι το ζητούμενο αποτέλεσμα επιτυγχάνεται σε χρόνο dt!
Καταλαβαίνω ότι πρώτα κάνεις ένα καλό «ξεκαθάρισμα» από περιττές γραμμές που δεν περιέχουν δεδομένα καθώς και από διπλότυπες εγγραφές. Έτσι μειώνεται και ο όγκος των προς επεξεργασία δεδομένων και στη συνέχεια γίνεται η όλη επεξεργασία με πολύ πιο αποτελεσματικό τρόπο. Έξυπνα και μεθοδευμένα από έναν εμπειρότατο χρήστη σαν κι εσένα.
Στην πράξη, με το αληθινό αρχείο από όπου πρέπει να αντληθούν οι πληροφορίες, έχω ένα εμπόδιο. Το αρχείο δοσμένο από τη μητρική εταιρεία εμπεριέχει επίσης κώδικα, τον οποίο τον έχουν βάλει για να «κοντρολάρει» τις καταχωρίσεις των χρηστών μας και είναι ένα πραγματικά πολύ «βαρύ» αρχείο τόσο κατά το άνοιγμα όσο και κατά τη διάρκεια των καταχωρίσεων, όπου πατώντας συνδυασμό πλήκτρων ξεκλειδώνει μόνο συγκεκριμένες στήλες / κελιά στα οποία πραγματοποιούνται οι καταχωρίσεις. Και επειδή είναι κλειδωμένα και τα φύλλα και η VBA πράγμα που σημαίνει πως δεν γνωρίζουμε τον κωδικό πρόσβασης προφανώς και δεν μπορεί να γίνει το παραπάνω «ξεκαθάρισμα», τουλάχιστον όχι στο ίδιο το αρχείο. Θα πρέπει μάλλον να τραβάω ένα «αντίγραφο» του επίμαχου φύλλου εργασίας στο βιβλίο που έχω τον κώδικα (και ίσως μόνο των στηλών που με ενδιαφέρουν, όπως μου είχες δείξει και στην παλαιότερη περίπτωση) και σε εκείνο το αντίγραφο να εφαρμόζεται ο κώδικας όπως τον έχεις συντάξει.
Σαφώς δεν είμαι έμπειρος όπως εσύ, ώστε να φτάνω στο ζητούμενο με τον πιο σύντομο και μεθοδευμένο τρόπο όπως και με το συγκεκριμένο παράδειγμα. Όμως μου κάνει τρομερή εντύπωση και η επίσημη ενημέρωση της μητρικής εταιρείας - για τις «περίεργες» συμπεριφορές όπως τις ονόμασαν - γενικότερα για το θέμα της επίδοσης των δημιουργημένων αρχείων σε Excel 2007 και την εκτέλεση τους στο περιβάλλον του Excel 2013. Αυτό το λέω, επειδή αρχεία με αυτοματοποιήσεις μας δίνουν και αυτοί (σε όλα τα τμήματα) και θέλω να πιστεύω, ότι αυτοί που τα δημιουργούν ή τα δημιουργήσαν ήταν έμπειροι μιας και στελεχώνουν ένα συγκεκριμένο τμήμα που ασχολείται αποκλειστικά με τέτοια αρχεία. Άλλωστε όπως αναφέρθηκα προέβησαν ήδη σε εγκατάσταση Virtual Excel 2007 για την αντιμετώπιση της επίδοσης των αρχείων (!?!). Δεν ξέρω εάν έτυχε κι εσύ να συναντήσεις τέτοιου είδους προβλήματα σε αρχεία τα οποία όντως να έχουν και σωστή χρήση / σύνταξη κώδικα.
Σε κάθε περίπτωση σε ευχαριστώ για την συνεισφορά σου στην περαιτέρω μετάδοση γνώσης, την οποία και σαφώς θα κάνω χρήση ώστε να έχω ακόμα καλύτερο αποτέλεσμα.
Συνεχίζουμε να μαθαίνουμε…

Να είσαι καλά.
Φιλικά
Δημήτρης
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Γενικά] Ερώτηση σχετικά με το Excel! Help! Νικόλαος Μ Excel - Ερωτήσεις / Απαντήσεις 9 25-01-16 10:21
Σχετικά με κλείδωμα pctechdr Access - Ερωτήσεις / Απαντήσεις 11 28-10-15 17:02
[Γενικά] Σχετικά με ημερομηνία xristos Excel - Ερωτήσεις / Απαντήσεις 7 09-01-14 12:16
Σχετικά με τnν procedure alex Access - Ερωτήσεις / Απαντήσεις 59 26-03-12 15:42


Η ώρα είναι 22:19.