| Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
Πρέπει λογικά να πάρω 18 αποτελέσματα αλλά κάτι δεν έχω κάνει σωστά! Ευχαριστώ ! |
|
#2
| |||
| |||
|
Καλησπέρα Δημήτρη δεν παίρνεις 18 αποτέλεσμα επειδή κάποια στιγμή προκαλείται λάθος και ο κώδικας διακόπτεται. Έχεις δηλώσει τις μεταβλητές a, b, και c ως Integer. Αυτό σημαίνει ότι η μέγιστη τιμή τους είναι: 32.768 Στη γραμμή κώδικα L=a*b*c επειδή και οι 3 παράγοντες είναι Integer η VBA θεωρεί και το αποτέλεσμα Integer. Έτσι όταν το γινόμενο είναι > 32.768 προκαλείται λάθος και ο κώδικας σταματάει. Μια λύση είναι να γράψεις : L = CLng(a) * b * c, δηλαδή να κάνεις τον ένα παράγοντα τύπου Long. Καλύτερη και ξεκάθαρη λύση είναι να δηλώνεις όλες τις μεταβλητές a, b, c, L ως Long, ώστε ο τύπος L=a*b*c να μη προκαλεί λάθος. |
|
#3
| |||
| |||
|
Ευχαριστώ πολύ Γιώργο! Να είσαι καλά!! |
|
#4
| |||
| |||
|
Επίσης Δημήτρη!
|
|
#5
|
|
Καλησπέρα Μερικές σημαντικές επισημάνσεις. Κατ' αρχάς, ο κώδικας αυτός (η module δηλαδή) δεν έχει Option Explicit. Η έκφραση αυτή, υποχρεώνει τον δημιουργό, να δηλώσει όλες τις μεταβλητές που θα χρησιμοποιήσει. Συνήθως οι κώδικες που προέρχονται από USA, έχουν αυτό το «κουσούρι» και είναι πράγματι πολύ κακός προγραμματισμός, για λόγους που δεν μπορούν να εξηγηθούν σε μερικές γραμμές... Στον original κώδικα: Κώδικας: Sub NIK()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim k As Integer
For b = 3 To 20
a = 2 * b - 4
c = 8 * b - 14
L = a * b * c
k = k + 1
Range("D" & k).Value = L
Next b
End Sub
Dim a As Integer Dim b As Integer Dim c As Integer Dim k As Integer χωρίς να εξετάσουμε το πως (ακέραιοι επί του προκειμένου) αλλά δεν δηλώνεται η μεταβλητή L. Αυτό είναι ακόμα χειρότερος προγραμματισμός, από το να γράψει κανείς κώδικα χωρίς Option Explicit όπως παρακάτω: Κώδικας: Sub NIK()
For b = 3 To 20
a = 2 * b - 4
c = 8 * b - 14
L = a * b * c
k = k + 1
Range("D" & k).Value = L
Next b
End Sub
Πρόταση: Αν θέλετε να ασχοληθείτε με κώδικα vba, μια από τις πρώτες δουλειές που πρέπει να κάνετε, είναι να ενεργοποιήσετε την υποχρεωτική δήλωση των μεταβλητών, όπως φαίνεται στις εικόνες 1 και 2. Επισήμανση: Γενικά, όταν έχουμε να κάνουμε με υπολογισμούς, επειδή οι μεταβλητές δεν ξέρουμε από που θα προκύψουν (εκτός αν τις βάλουμε «καρφωτά» και δεν αλλάζουν πχ ακέραιους) και μπορεί να είναι ακέραιοι ή και δεκαδικοί, καλό είναι να ορίζουμε δυό πράγματα. 1 Την μορφή του αριθμού στο κελί προορισμού πχ cell.NumberFormat(....,"μορφοποίηση") 2 Να είναι μέσα σε μια Cdbl() *Δεν ισχύει πάντα (95%) αλλά ας το έχουμε υπ' όψιν... |
|
#6
| |||
| |||
|
Ευχαριστώ πολύ για τον χρόνο που αφιερώνεται για να μας βοηθάτε.. Η βοήθειά σας είναι ανεκτίμητη.Είσαστε πολύ έμπειροι και γνώστες του αντικειμένου αυτού. 'Οσο αφορά για την vba ενώ μου αρέσει πολύ, δυστυχώς δεν έχω χρόνο και την κατάλληλη ηλικία να ασχοληθώ σοβαρά. Να είσαστε καλά ! |
|
#7
|
|
Να 'σαι καλά καλή συνέχεια.
|
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [Γενικά] Πρόβλημα εισαγωγής δεδομένων σε κελιά του Excel και πρόβλημα με συνάρτηση | ΣΟΦΙΑΖΩΤΟΥ | Excel - Ερωτήσεις / Απαντήσεις | 0 | 02-12-13 13:14 |
Η ώρα είναι 20:38.


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

