Καλησπέρα
Μερικές σημαντικές επισημάνσεις.
Κατ' αρχάς, ο κώδικας αυτός (η 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%) αλλά ας το έχουμε υπ' όψιν...