georgew:Αλλά για ποιο λόγο πριν που δεν δήλωσα τις μεταβλητές μου έβγαζε κάποιες λέξεις πάνω από μια φορά?
Χωρίς το Option Explicit μπορείς να χρησιμοποιήσεις μία μεταβλητή χωρίς
να τη δηλώσεις. Αλλά η μεταβλητή αυτή είναι προσωρινή. Διαγράφεται από
τη μνήμη μετά από την εκτέλεση του κώδικα. Δοκίμασε τα παρακάτω για να
δεις τη διαφορά:
Χωρίς δήλωση:
Private Sub Command1_Click()
MsgBox d
d = 4
MsgBox d
End Sub
Με δήλωση:
Dim d
Private Sub Command1_Click()
MsgBox d
d = 4
MsgBox d
End Sub
(κάλεσε το Command1_Click περισσότερες από μία φορές για να δεις τη διαφορά)
Και κάτι άλλο:
Αν και (κατά τη γνώμη μου)
ταλαιπωρείσαι με το να χρησιμοποιείς πίνακες χωρίς να χρειάζεται (βλ.
leksi = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)),
ταλαιπωρείσαι με το να μη χρησιμοποιείς πίνακες ενώ χρειάζεται (βλ.
Loop While p = 0 Or p = i Or p = k Or p = l Or p = m Or p = n Or p = o)
πιστεύω πως είναι δευτερέυοντα (καθώς αυτά είναι που θα σου δώσουν
εμπειρία και αργότερα θα μπορείς να έχεις πολύ μεγαλύτερα αποτελέσματα
με πολύ λιγότερες γραμμές κώδικα)
σε σχέση με το ότι: δε χρησιμοποιείς το βρόγχο For-Next (ενώ χρησιμοποιείς τον Do-Loop!).
Κάτι τέτοιο θα σε βοηθήσει πολύ σε συνδυασμό με τα Indexed Controls
(π.χ. όλα αυτά τα Label για τα γράμματα να είχαν το ίδιο όνομα και
διαφορετική τιμή στο Index)
Παράδειγμα (από τον κώδικά σου)
Public Sub disable()
Timer1.Enabled = False
Static N As Integer
For N = 1 To 30
Label(N).Enabled = False
Next N
End Sub
Private Sub Label_Click(Index As Integer)
a = Label(Index).Caption
Label(Index).Enabled = False
Call gramma
End Sub