Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 18-08-18, 16:47
Το avatar του χρήστη Spirosgr
Spirosgr Ο χρήστης 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  
Απάντηση με παράθεση