Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Συναρτήσεις ] Συνάρτηση EOMONTH

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 08-11-10, 16:45
Όνομα: Μάρω
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 09-03-2010
Περιοχή: Αθήνα
Μηνύματα: 287
Προεπιλογή Συνάρτηση EOMONTH

Καλησπέρα σε όλους.
Προσπάθησα να μέταφέρω τη συνάρτηση EOMONTH στην Access αλλά μάλλον δεν έχω γράψει καλά τον τύπο. Βοήθεια???

Function EOMONTH(StartDate#, Optional Months% = 0) As Double
EOMONTH = Excel.WorksheetFunction.EOMONTH(StartDate, Months)
End Function


Ευχαριστώ,
Μάρω
Απάντηση με παράθεση
  #2  
Παλιά 08-11-10, 18:02
Όνομα: ΝΑΣΟΣ
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 14-10-2010
Μηνύματα: 455
Προεπιλογή

Καλησπέρα Μάρω.
Ισως αυτό σε βοηθήσει.
http://www.fontstuff.com/vba/vbatut05.htm#endofmonth
Απάντηση με παράθεση
  #3  
Παλιά 08-11-10, 18:50
Όνομα: Μάρω
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 09-03-2010
Περιοχή: Αθήνα
Μηνύματα: 287
Προεπιλογή

Μια χαρά είναι Νάσο.
Σε ευχαριστώ

Μάρω
Απάντηση με παράθεση
  #4  
Παλιά 08-11-10, 21:34
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα στην παρέα

Μάρω μπορείς να δοκιμάσεις και τον παρακάτω κώδικα:
Κώδικας:
Public Function EndOfMonth(d As Date) As Integer
    EndOfMonth = Day(DateSerial(Year(d), Month(d) + 1, 0))
End Function
Φιλικά/Γιώργος
Απάντηση με παράθεση
  #5  
Παλιά 09-11-10, 09:12
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλημέρα κι από μένα!

H EOMONTH δεν αποτελεί μέλος της Excel.WorksheetFunction() σε εκδόσεις παλαιότερες της 2007
και δεν προτείνεται σε καμία περίπτωση να συμπεριληφθεί στη VBA, στα πλαίσια ενός αυτοματισμού.

Ο κώδικας του Γιώργου είναι αυτός που πραγματικά αντικαθιστά την EOMONTH της Excel!
που μπορεί να χρησιμοποιηθεί και χωρίς το "Day(..." για να επιστρέψει ημερόμηνία πχ:

Κώδικας:
Function EndOfMonth(d As Date) As Date
    EndOfMonth = DateSerial(Year(d), Month(d) + 1, 0)
End Function
Φίλε Νάσο, καλωσόρισες στην παρέα μας!


Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 09-11-10, 09:39
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Η συνάρτηση προσδιορισμού των ημερών ενός μήνα μπορεί να βοηθήσει και στον προσδιορισμό των δίσεκτων ετών.
Αυτό μπορεί να γίνει με την ακόλουθη συνάρτηση:
Κώδικας:
Public Function isDisekto(Etos As Integer) As Boolean
    isDisekto = Day(DateSerial(Etos, 3, 0)) = 29
End Function
Φιλικά/Γιώργος
Απάντηση με παράθεση
  #7  
Παλιά 09-11-10, 18:08
Όνομα: Μάρω
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 09-03-2010
Περιοχή: Αθήνα
Μηνύματα: 287
Προεπιλογή

Χαίρομαι όταν φέρνω "ανταγωνισμό" στην ομάδα




Την καλησπέρα μου σε όλους
Μάρω
Απάντηση με παράθεση
  #8  
Παλιά 09-11-10, 23:52
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Καλησπέρα στην παρέα

Είπα να ανακατευτώ και εγώ στην κουβέντα μιας και αναφέρθηκε το EXCEL.

Όπως είπε και ό Τάσος.
Η ΕΟΜΟΝΤΗ συνάρτηση του Excel που είναι ενσωματωμένη μόνο από το 2007 και μετά, για τις προηγούμενες εκδόσεις "δεν είναι διαθέσιμη και επιστρέφει το σφάλμα #ΟΝΟΜΑ?, θα πρέπει να γίνει εγκατάσταση και φόρτωση του πρόσθετου Πακέτο Εργαλείων Ανάλυσης" όπως αναφέρει και η βοήθεια.

Τώρα για την πλήρη κάλυψη του θέματος η EOMONTH σε όλες τις εκδόσεις του Excel δέχεται δύο παραμέτρους, πράγμα που δεν λαμβάνει υπόψιν η προτεινόμενη EndOfMonth που προτάθηκε.
Απ την άλλη βλέποντας το αρχικό ερώτημα μάλλον ψάχνουμε κάτι όπου η δεύτερη παράμετρος να είναι προαιρετική.

Θα έλεγα λοιπόν ότι σε VBA θα πρέπει να χρησιμοποιήσουμε:

Κώδικας:
Function myEOMONTH(d As Date, Optional m%) As Date
   myEOMONTH = DateSerial(Year(d), Month(d) + 1 + m, 0)
End Function
Το αν θα μας επιστρέφει ημερομηνία ή αριθμό το αφήνω να το κρίνετε εσείς.

Ελπίζω ότι θα συμφωνήσετε με την προτεινόμενη διόρθωση. Δείτε όμως και το ΥΓ.

Τα λέμε
Θανάσης

ΥΓ και μην ξεχνάτε ότι το Excel (σε όλες τις εκδόσεις του) εσφαλμένα θεωρεί το 1900 σαν δίσεκτο παρόλα αυτά η =EOMONTH("2/2/1900";0) επιστρέφει σωστό αποτέλεσμα ενώ η =myEOMONTH("2/2/1900";0) μας δίνει λάθος 29/2/1900.
Απάντηση με παράθεση
  #9  
Παλιά 10-11-10, 08:31
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Θανάση δοκίμασα τη συνάρτηση στο παράθυρο immediate, με ημερομηνία 2/2/1900 και όπως βλέπεις
Παράθεση:
?EndOfMonth(#2/2/1900#)
28
,στην access 2007, έδωσε σωστό αποτέλεσμα. Ίσως το λάθος να υπάρχει σε προηγούμενες εκδόσεις.
Συμφωνώ ότι η λύση που πρότεινα δεν αποτελεί πλήρη προσομοίωση της συνάρτησης EOMONTH.
Την παράμετρο για τους μήνες δεν τη θεώρησα σημαντική, αφού μπορούμε να περάσουμε στη συνάρτηση το αποτέλεσμα της συνάρτησης DataAdd που δίνει τη δυνατότητα προσθήκης σε μια ημερομηνία μεγάλης ποικιλίας χρονικών διαστημάτων (μέρες, βδομάδες, μήνες, τρίμηνα, κλπ).

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #10  
Παλιά 10-11-10, 09:01
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από kapetang Εμφάνιση μηνυμάτων
...
Θανάση δοκίμασα τη συνάρτηση στο παράθυρο immediate, με ημερομηνία 2/2/1900 και όπως βλέπεις, ... στην access 2007, έδωσε σωστό αποτέλεσμα. Ίσως το λάθος να υπάρχει σε προηγούμενες εκδόσεις.
Καλημέρα σας.
Έχεις δίκιο Γιώργο.
Με παρέσυρε ο Τάσος και αφαίρεσα την Day()
Άρα Θα έλεγα myEOMONTH = Day(DateSerial(Year(d), Month(d) + 1 + m, 0))

Τα λέμε
Θανάσης

ΥΓ Θα έλεγα ότι πρόκειται για ερώτηση VBA και όχι Access ή Excel, άρα μάλλον σε λάθος ενότητα βρισκόμαστε Μήπως θα έπρεπε να μεταφερθεί;
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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



Η ώρα είναι 07:41.