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