Discussion:
Monat in Zahl umwandeln
(zu alt für eine Antwort)
Andreas Huhn
2003-10-31 16:34:30 UTC
Permalink
Hallo,
folgendes Problem:
Ich habe den Namen eines Monats (z.B. Oktober) und will dafür eine "10"
zurückhaben.

Wenn ich es mit:
Month("Oktober" & " 1")

mache, dann geht es zwar, sieht aber nicht ganz sauber aus.

Gibts da was anderes? Eigentlich genau eine Umkehr der MonthName Funktion.

MfG

Andreas
Juergen Thuemmler
2003-10-31 17:26:16 UTC
Permalink
Post by Andreas Huhn
Ich habe den Namen eines Monats (z.B. Oktober) und will dafür eine "10"
zurückhaben.
Handarbeit mit "Select Case".

Jürgen.
Herfried K. Wagner [MVP]
2003-10-31 17:50:20 UTC
Permalink
Post by Andreas Huhn
Ich habe den Namen eines Monats (z.B. Oktober) und will dafür eine "10"
zurückhaben.
Month("Oktober" & " 1")
mache, dann geht es zwar, sieht aber nicht ganz sauber aus.
Gibts da was anderes? Eigentlich genau eine Umkehr der MonthName Funktion.
Ich sehe dazu auch keine bessere Lösung. Beachte, dass dies auf einem
englischsprachigen System nicht funktionieren wird, wenn die Angaben in
Deutsch eingegeben werden.
--
Herfried K. Wagner
MVP · VB Classic, VB.NET
<http://www.mvps.org/dotnet>
Peter Götz
2003-10-31 17:49:37 UTC
Permalink
Hallo Andreas,
Post by Andreas Huhn
Ich habe den Namen eines Monats (z.B. Oktober) und will dafür eine "10"
zurückhaben.
Public Function NumMonat(MonatName As String) As Integer
NumMonat = Month(CDate(MonatName & " 1.1"))
End Function


Als Monatsnamen kannst Du auf einem deutschen System

Januar, Februar, März, April, Mai, Juni, Juli
August, September, Oktober, November, Dezember

oder

Jan, Feb, Mrz/Mär, Apr, Mai, Jun, Jul,
Aug, Sep/Sept, Okt, Nov, Dez

verwenden.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Andreas Huhn
2003-10-31 21:03:21 UTC
Permalink
Hallo Jürgen, Peter und Herfried,
gibt also doch keine Funktion dafür. Dann werd ich es erstmal so belassen
wie es ist, um die Einschränkungen wissend. Danke für eure Antworten.

Viele Grüsse

Andreas
Peter Götz
2003-11-01 07:36:14 UTC
Permalink
Hallo Andreas,
Post by Andreas Huhn
gibt also doch keine Funktion dafür. Dann werd ich es erstmal so belassen
wie es ist, um die Einschränkungen wissend. Danke für eure Antworten.
Hier wäre noch eine andere Möglichkeit:

' /// Code in Standardmodul *.bas
Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long

Public pMColl As Collection

Public Function MNames() As Collection
Dim i As Integer
Dim lngInfo As Long
Dim lngRet As Long
Dim strBuffer As String
Dim Coll As Collection
Set Coll = New Collection
For i = 0 To 11
lngInfo = &H38 + i
lngRet = GetLocaleInfo(0, lngInfo, vbNullString, 0)
If lngRet > 0 Then
strBuffer = String$(lngRet, 0)
lngRet = GetLocaleInfo(0, lngInfo, strBuffer, Len(strBuffer))
If lngRet Then
Coll.Add i + 1, Left$(strBuffer, lngRet - 1)
End If
End If
Next i
Set MNames = Coll
End Function
' \\\ Ende Code


Mit lngINfo &h38 + i wird die Collection mit den vollständigen Monatsnamen
gefüllt.
Mit lngInfo = &h44 + i wird die Collection mit den abgekürzten Monatsnamen
gefüllt.

Nach dem Programmstart wird einmal

Set pMColl = MNames

ausgeführt. Damit ist die als Public deklarierte Collection pMColl mit den
Monaten gefüllt und ab dann kannst Du Deine Monate einfach so abfragen:

dim Monat as integer
Monat = pMColl("August")

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Peter Götz
2003-11-01 10:12:37 UTC
Permalink
Hallo Andreas,
Post by Andreas Huhn
gibt also doch keine Funktion dafür.
Wenn es unbedingt eine Funktion sein soll:

Public Function GetMonth(MName As String, _
Optional Abbreviated As Boolean) As Integer

Dim i As Integer
For i = 1 To 12
If UCase(MName) = UCase(MonthName(i, Abbreviated)) Then
GetMonth = i
Exit Function
End If
Next i
With Err
.Raise vbObjectError Or &H1005, "GetMonth()", _
"MName: """ & MName & """ invalid!"
End With
End Function

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Andreas Huhn
2003-11-01 21:44:39 UTC
Permalink
Schöne Funktion, Peter. Danke dir.

Winfried Kaiser
2003-11-01 06:45:29 UTC
Permalink
month("1. "&"Oktober") liefert die gewünschte "10"
--
Dipl.-Ing.(TH) Winfried Kaiser
Fortune Systems GmbH & Co.
D-24975 Husby
Germany
Post by Andreas Huhn
Hallo,
Ich habe den Namen eines Monats (z.B. Oktober) und will dafür eine "10"
zurückhaben.
Month("Oktober" & " 1")
mache, dann geht es zwar, sieht aber nicht ganz sauber aus.
Gibts da was anderes? Eigentlich genau eine Umkehr der MonthName Funktion.
MfG
Andreas
Peter Götz
2003-11-01 07:57:15 UTC
Permalink
Hallo Winfried,
Post by Winfried Kaiser
month("1. "&"Oktober") liefert die gewünschte "10"
Auch dabei macht VB intern per autom. Typumwandlung dieses:

Month(cDate("1. " & "Oktober"))

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Lesen Sie weiter auf narkive:
Loading...