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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 18-08-18, 13:23
Όνομα: ΔΗΜΗΤΡΗΣ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-08-2011
Μηνύματα: 126
Προεπιλογή Πρόβλημα με το γινόμενο

Πρέπει λογικά να πάρω 18 αποτελέσματα αλλά κάτι δεν έχω κάνει σωστά!
Ευχαριστώ !
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm ΓΙΝΟΜΕΝΟ.xlsm (13,2 KB, 5 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 18-08-18, 14:47
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Δημήτρη δεν παίρνεις 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  
Παλιά 18-08-18, 15:10
Όνομα: ΔΗΜΗΤΡΗΣ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-08-2011
Μηνύματα: 126
Προεπιλογή

Ευχαριστώ πολύ Γιώργο!
Να είσαι καλά!!
Απάντηση με παράθεση
  #4  
Παλιά 18-08-18, 16:37
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Επίσης Δημήτρη!
Απάντηση με παράθεση
  #5  
Παλιά 18-08-18, 16:47
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλησπέρα
Μερικές σημαντικές επισημάνσεις.

Κατ' αρχάς, ο κώδικας αυτός (η 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
που τρέχει κανονικά χωρίς προβλήματα και εμφανίζει όλα (18) τα γινόμενα...

Πρόταση:
Αν θέλετε να ασχοληθείτε με κώδικα vba,
μια από τις πρώτες δουλειές που πρέπει να κάνετε, είναι να ενεργοποιήσετε
την υποχρεωτική δήλωση των μεταβλητών, όπως φαίνεται στις εικόνες 1 και 2.

Επισήμανση:
Γενικά, όταν έχουμε να κάνουμε με υπολογισμούς,
επειδή οι μεταβλητές δεν ξέρουμε από που θα προκύψουν
(εκτός αν τις βάλουμε «καρφωτά» και δεν αλλάζουν πχ ακέραιους)
και μπορεί να είναι ακέραιοι ή και δεκαδικοί,
καλό είναι να ορίζουμε δυό πράγματα.
1
Την μορφή του αριθμού στο κελί προορισμού πχ cell.NumberFormat(....,"μορφοποίηση")
2
Να είναι μέσα σε μια Cdbl()
*Δεν ισχύει πάντα (95%) αλλά ας το έχουμε υπ' όψιν...
Συνημμένα Thumbnails
Πρόβλημα με το γινόμενο-screenshot_1.jpg   Πρόβλημα με το γινόμενο-screenshot_2.jpg  
Απάντηση με παράθεση
  #6  
Παλιά 18-08-18, 18:50
Όνομα: ΔΗΜΗΤΡΗΣ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-08-2011
Μηνύματα: 126
Προεπιλογή

Ευχαριστώ πολύ για τον χρόνο που αφιερώνεται για να μας βοηθάτε..
Η βοήθειά σας είναι ανεκτίμητη.Είσαστε πολύ έμπειροι και γνώστες του αντικειμένου αυτού.
'Οσο αφορά για την vba ενώ μου αρέσει πολύ, δυστυχώς δεν έχω χρόνο και την κατάλληλη ηλικία να ασχοληθώ σοβαρά.
Να είσαστε καλά !
Απάντηση με παράθεση
  #7  
Παλιά 18-08-18, 18:52
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Να 'σαι καλά καλή συνέχεια.
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Γενικά] Πρόβλημα εισαγωγής δεδομένων σε κελιά του Excel και πρόβλημα με συνάρτηση ΣΟΦΙΑΖΩΤΟΥ Excel - Ερωτήσεις / Απαντήσεις 0 02-12-13 13:14


Η ώρα είναι 20:38.