Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Datumerkennung bei VBA


Betrifft: Datumerkennung bei VBA von: Edi
Geschrieben am: 05.01.2018 23:07:08

Liebe Excel Gemeinde

Jetzt wende ich mich hier auch mal mit einer Frage zu Wort, die mich verzweifeln lässt.

Ich schreibe an einem umfaangreichen Code, der hier den Rahmen sprengen würde.
Darin jedoch benutze ich eine do loop Schleife

Do
If Month(Cells(a, 4)) = bytMonat Then a = a + 1
Loop Until Month(Cells(a, 4)) <> bytMonat

wobei bytMonat eine Variable ist, die einen vorher abgefragten Monat als Zahl übergeben bekommt.

An sich funktioniert der Code soweit einwandfrei, außer, die Variable enthält eine 12 für den Dezember, denn irgendwann ist die Liste zu Ende und es folgt unter dem letzten Datum eine leere Zelle.
Ja, und nun erkennt Excel nicht, dass eine leere Zelle ungleich dem Dezember ist.
Auch ein simples

MsgBox Month(Cells(1, 1)

bringt es an den Tag.
Steht in A1 ein Datum, wird der Monat korrekt angezeigt.
Ist die Zelle leer, erhalte ich eine 12.

Was kann ich tun?

Viele Grüße

Edi

  

Betrifft: AW: Datumerkennung bei VBA von: Mullit
Geschrieben am: 06.01.2018 00:24:16

Hallo,

so in die Richtung, Byte ist übrigens Banane, nimm Long:

Do
If Month(Cells(a, 4).Value) = bytMonat Then a = a + 1
Loop Until Month(Cells(a, 4).Value) <> bytMonat Or IsEmpty(Cells(a, 4).Value)

Gruß, Mullit


  

Betrifft: AW: Datumerkennung bei VBA von: Edi
Geschrieben am: 06.01.2018 00:37:34

Hallo Mullit

Eine ODER Verknüpfung.
Da wäre ich jetzt nicht drauf gekommen, dass das geht.
Danke für den Tipp.

Trotzdem komisch, dass eine leere Zelle einen Monat zurückgibt.

Noch die Frage, warum ist byte Banane?
Der Wert kann 12 nicht übersteigen.


  

Betrifft: AW: Datumerkennung bei VBA von: Hajo_Zi
Geschrieben am: 06.01.2018 06:31:38

eine leere Zelle ist 00.01.1900 also Januar.

GrußformelHomepage

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung....."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben,
mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.

Beiträge von Werner, Luc, robert und folgende lese ich nicht.


  

Betrifft: AW: Datumerkennung bei VBA von: Mullit
Geschrieben am: 06.01.2018 11:29:11

Hallo,

@Edi: Byte wird nur benötigt, wenn best. Funktionen diesen Datentyp verwenden und erfordern, andernfalls ist für ganze Zahlen der Long-Datentyp in VBA am performantesten...

@ Hajo: Das sieht die Month-Funktion leider anders....

Option Explicit

Public Sub test()
   MsgBox ActiveCell.Address & " ist " & IIf(IsEmpty(ActiveCell.Value), "", "nicht") & _
      " leer und zeigt Monat: " & Month(ActiveCell.Value)
End Sub

Gruß, Mullit


  

Betrifft: AW: Datumerkennung bei VBA von: Edi
Geschrieben am: 06.01.2018 14:08:01

Danke für den Hinweis.
bin halt noch eher Neuling.
Dann werde ich in Zukunft auf long umsteigen.

Ich habe jetzt noch eine andere Lösung realisiert, noch bevor die Antwort kam.
Ich benutze jetzt den .End(xldown) um in den letzten Datensatz zu springen und nutze dann die Schleife von unten nach oben, also mit a=a-1.
Damit schließe ich aus, dass eine leere Zelle getroffen wird.
Aber Or ist natürlich auch super. ich wusste nicht, dass man die Endbedingung mit Or verknüpfen kann