Mit VB6-Modul fehlendes Datum ermitteln

AndreasRoe

Grünschnabel
Hallo.

Dieses VBA-Makro läuft wunderbar: In einer Reihe von Zellen soll überprüft werden
ob ein Datum exitiert oder nicht: (siehe Bild im Anhang)

Code:
Option Explicit


Sub Fehlt_Datum()

Dim aTage(1 To 5) As Date
Dim iKW           As Long
Dim iAnzTage      As Long
Dim dMontag       As Date
Dim dFreitag2     As Date
Dim dFreitag      As Date
Dim iIndex        As Long
Dim rZelle        As Range
Dim bWert         As Boolean
Dim Datum1
Datum1 = Date

   With Worksheets("Datum")
        iKW = DatePart("ww", Application.Range("B12").Value, vbMonday, vbFirstFourDays)
        iAnzTage = 7 * iKW
        dMontag = Datum1
      
      'MsgBox " Es existiert, also weiter gehts "
      dFreitag2 = dMontag - 4
     ' dDonnerstag2 = dMontag - 5
      
       If Weekday(Date) = 3 Then
         For iIndex = 1 To 5
            aTage(iIndex) = dFreitag2
            Next iIndex

            End If
           
        
        For iIndex = 1 To 1
         Set rZelle = Application.Range("B12:B" & iAnzTage).Find(aTage(iIndex), LookIn:=xlValues, Lookat:=xlWhole)
        bWert = True
      
         If rZelle Is Nothing Then
            MsgBox "der " & Format(aTage(iIndex), "dd.mm.yyyy") & " fehlt.", _
               48, "   Hinweis für " & Application.UserName
               bWert = False
        End If
        Next iIndex
      
      
      
        If bWert = True Then
            MsgBox " Es existiert, also weiter gehts "
        End If
       
       
            End With

       Exit Sub
End Sub

Füge ich den Quellcode aber in ein Modul in Visual-Basic-6 ein, funktioniert es nicht mehr wie gewünscht.
Obwohl das Datum 29.08.2008 in drei Zellen existiert kommt die MsgBox: "der 29.08.2008 fehlt".
Es sollte dann aber die MsgBox " Es existiert, also weiter gehts " erscheinen.

Kann mir jemand helfen?

Beste Grüße
Andreas
 

Anhänge

  • fehlendes-Datum.jpg
    fehlendes-Datum.jpg
    198,6 KB · Aufrufe: 41
Das Einzige, was mir auf Anhieb auffällt:

Visual Basic:
For iIndex=1 to 1

iIndex soll von "Eins bis Eins" laufen?
 
Hallo Zvoni.

Wenn ich
Code:
For iIndex = 1 To 5
schreibe,
bekomme ich 5x die MsgBox. Einmal reicht.

In der Anlage ist das funktionierende Beispiel für Excel2003 + VBA.

Grüße Andreas
 

Anhänge

  • Datum.zip
    8,5 KB · Aufrufe: 12
Wenn du das ganze in VB6 machst, arbeitest du ja wahrscheinlich mit einem Excel-Objekt. Im Prinzip kennt das sämtliche Excel-VBA-Befehle, aber nicht die Excel-Konstanten.

In der Zeile
Visual Basic:
rZelle = Application.Range("B12:B" & iAnzTage).Find(aTage(iIndex), LookIn:=xlValues, Lookat:=xlWhole)
sind also in VB die Excel-Konstantennicht definiert, du müstest sie durch ihre Zahlenwerte ersetzen (mach in Excel direkt danach einen Haltepunkt und schau dir die Werte an, indem du mit der Maus auf sie deutest).

Du kannst das ganze insofern vereinfachen, als dass du z.B. in einem Modul den Konstanten den Wert zuweist, so brauchst du den Code selbst nicht ändern.


Der Doc!
 
Hmmm, hab mir mal deine Excel-Variante angesehen.

Ich vermute, die Gurke sitzt hier:
Visual Basic:
Set rZelle=Application.Range 'blablabla usw.

Da du am Anfang einen With-Block eröffnest, solltest du "Application" weglassen, damit das Range-Objekt dem Worksheet zugeordnet bleibt.

Da du das Ganze jedoch in VB6 (Also nicht in Excel) jetzt hast, bezieht sich Application auf dein VB6-Projekt, und nicht mehr auf deine Excel-Mappe.

EDIT: Doc hat mal wieder recht. Die Excel-Konstanten habe ich voll übersehen ^^
 
Zurück