| 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 |
Η ώρα είναι 10:43.


Αλλαγή σε γραμμικό τρόπο

