
05-03-11, 14:59
|
 | Διαχειριστής Όνομα: Τάσος Φιλοξενιδης Έκδοση λογισμικού Office: Ms-Office 365 Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική | | Εγγραφή: 21-10-2009
Μηνύματα: 2.035
| |
Αναστάση καλησπέρα και καλωσόρισες στο φόρουμ!
Ο κώδικας σου δεν έχει κάποιο συντακτικό λάθος.
Σου γράφω τα παρακάτω σε θεωρητικό επίπεδο όπως το βλέπει ο προγραμματιστής :
.....Cells(.Range("A65536") δεν θα λειτουργήσει σε 2007 αν τα κελιά έχουν ήδη φτάσει μέχρι τη γραμμή 65536.
Για να μην αντιμετωπίσεις πρόβλημα σε περίπτωση που το φύλλο "Φύλλο2" μετονομαστεί
ή το κελί A1 χρειαστεί να μετακινηθεί, δημιούργησε το όνομα "MyCell" με αναφορά το κελί
A1 (στο φύλλο "Φύλλο1") και στο συμβάν Worksheet_Change() δοκίμασε το παρακάτω: Κώδικας: Private Sub Worksheet_Change(ByVal Target As Range)
Dim DestinationCell As Range
If Not Intersect(Target, Range("MyCell")) Is Nothing Then
With Sheet2 ' Sheet2=το εσωτερικό όνομα του φύλλου (CodeName)
'Eίναι πιο ασφαλές να χρησιμοποιούμε το εσωτερικό όνομα του φύλλου (CodeName)
'Επίσης καλό είναι να μήν υπάρχουν εσωτερικά ονόματα που περιέχουν ελληνικούς χαραχτήρες (πχ.Φύλλο1).
'Σ αυτή την περίπτωση μπορούμε να αλλάξουμε τα εσωτερικά ονόματα των φύλλων σε άλλα με λατινικούς χατακτήρες
If IsEmpty(.Range("A1")) Then .Range("A1").Value = Target.Value: Exit Sub
'Περνάει την τιμή στο A1 αν αυτό είναι κενό
Set DestinationCell = .Range("A" & Rows.Count).End(xlUp).Offset(1)
If IsEmpty(DestinationCell) Then
DestinationCell.Value = Target.Value
Else 'αν το τελευταίο κελί της στήλης περιέχει ήδη τιμή
MsgBox "Destination Sheet is Full", vbInformation
End If
End With
Target.Select
End If
End Sub
Έτσι, χωρίς να χρειαστείς αλλαγές στον κώδικα μπορείς: - Αν χρειαστεί να μετακινήσεις το κελί "MyCell" σε οποιοδήποτε σημείο του φύλλου.
- Να μετονομάσεις το φύλλο προορισμού σε οτιδήποτε άλλο.
- Λιγότερο χρήσιμο. Να μην περιορίζεσαι στις 65536 εγγραφές αν βρίσκεσαι σε περιβάλλον Excel 2007 (*.xlsx)
Φιλικά
Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |