Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Συναρτήσεις ] Συνάρτηση EOMONTH (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/824-synartisi-eomonth.html)

mdragon 08-11-10 16:45

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

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


Ευχαριστώ,
Μάρω

nasos23 08-11-10 18:02

Καλησπέρα Μάρω.
Ισως αυτό σε βοηθήσει.
http://www.fontstuff.com/vba/vbatut05.htm#endofmonth

mdragon 08-11-10 18:50

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

Μάρω

kapetang 08-11-10 21:34

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

Μάρω μπορείς να δοκιμάσεις και τον παρακάτω κώδικα:
Κώδικας:

Public Function EndOfMonth(d As Date) As Integer
    EndOfMonth = Day(DateSerial(Year(d), Month(d) + 1, 0))
End Function

Φιλικά/Γιώργος

Tasos 09-11-10 09:12

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

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

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

Κώδικας:

Function EndOfMonth(d As Date) As Date
    EndOfMonth = DateSerial(Year(d), Month(d) + 1, 0)
End Function

Φίλε Νάσο, καλωσόρισες στην παρέα μας! :byebye:


Φιλικά

Τάσος

kapetang 09-11-10 09:39

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

Η συνάρτηση προσδιορισμού των ημερών ενός μήνα μπορεί να βοηθήσει και στον προσδιορισμό των δίσεκτων ετών.
Αυτό μπορεί να γίνει με την ακόλουθη συνάρτηση:
Κώδικας:

Public Function isDisekto(Etos As Integer) As Boolean
    isDisekto = Day(DateSerial(Etos, 3, 0)) = 29
End Function

Φιλικά/Γιώργος

mdragon 09-11-10 18:08

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




Την καλησπέρα μου σε όλους
Μάρω

gr8styl 09-11-10 23:52

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

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

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

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

Θα έλεγα λοιπόν ότι σε 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. :dft012:

kapetang 10-11-10 08:31

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

Θανάση δοκίμασα τη συνάρτηση στο παράθυρο immediate, με ημερομηνία 2/2/1900 και όπως βλέπεις
Παράθεση:

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

Φιλικά/Γιώργος

gr8styl 10-11-10 09:01

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 4315)
...
Θανάση δοκίμασα τη συνάρτηση στο παράθυρο immediate, με ημερομηνία 2/2/1900 και όπως βλέπεις, ... στην access 2007, έδωσε σωστό αποτέλεσμα. Ίσως το λάθος να υπάρχει σε προηγούμενες εκδόσεις.

Καλημέρα σας.
Έχεις δίκιο Γιώργο.:thumbup:
Με παρέσυρε ο Τάσος :sntoup:και αφαίρεσα την Day()
Άρα Θα έλεγα myEOMONTH = Day(DateSerial(Year(d), Month(d) + 1 + m, 0))

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

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


Η ώρα είναι 05:49.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2