Hi Leute,
habe folgendes Problem in VBA:
Ich habe in eine Tabelle Artikel und eine verknüpfende Tabelle Lese_History, welche über die Artikelnr verknüpft sind. In der zweiten Tabelle werden gelesene Artikel mit dem Usernamen registrierter User aufgelistet.
Nun will ich in VBA über eine Textbox eine Anzahl an Tagen eingeben, die vom heutigen Datum zurückgerechnet werden und der Rechner soll schauen, welche Artikel, die älter als dieses Datum sind, noch ungelesen sind. Später soll ein Vergleich zwischen (ungelesenen/allen Artikel)>Konstante eine Fehlermeldung bringen. Meine Realisierung bisher:
Klassenmodul
Private Sub Befehl0_Click()
Dim int_days As Integer 'wieviele Tage von heute soll er zurückgehen
Dim dt_Heute As Date 'findet das heutige Datum heraus
Dim dt_Pruefdatum As Date 'wann soll er prüfen
int_days = Tage
dt_Heute = Now() 'findet das heutige Datum heraus
dt_Pruefdatum = DateDiff("d", int_days, dt_Heute) 'zieht die eingestellten Tage vom heutigen Datum ab
Text10 = dt_Pruefdatum
Call Alte_Artikel1(Me, dt_Pruefdatum)
Me.Liste14.RowSource = ""
Me.Liste14.RowSource = "Titel"
Me!Liste14.Requery
End Sub
Standardmodul
Sub Alte_Artikel1(frm As Form, dt_Pruefdatum As Date)
Dim dbs As DAO.Database
Dim str_SQL_2 As String
Dim str_SQL_3 As String
Dim rst_2 As DAO.Recordset
Dim rst_3 As DAO.Recordset
Dim count_2 As String
Dim count_3 As String
Const sng_Warnung As Single = 0.1
Dim dt_Pruefdatum1 As Date
Dim qdf As QueryDef
dt_Pruefdatum1 = dt_Pruefdatum
On Error Resume Next
Set dbs = CurrentDb
Set rst_2 = Nothing
str_SQL_2 = vbNullString
str_SQL_2 = "Select [Artikel].[Titel] " 'Versuch 1 ungelesene Artikel
str_SQL_2 = str_SQL_2 & "From [Artikel] left join [Lese_History] on [Artikel].[Artikelnr] = [Lese_History].[Artikelnr] "
str_SQL_2 = str_SQL_2 & "Where [Username] is NULL AND [Veröffentlichungsdatum] < dt_Pruefdatum1 "
'str_SQL_2 = "Select [Artikel].[Titel] " 'Versuch 2 ungelesene Artikel
'str_SQL_2 = str_SQL_2 & "From [Artikel] "
'str_SQL_2 = str_SQL_2 & "Where [Artikel].[Artikelnr] NOT IN (Select [Lese_History].[ArtikelNr] From [Lese_History])"
Set rst_2 = dbs.OpenRecordset(str_SQL_2)
rst_2.MoveFirst
rst_2.MoveLast
count_2 = rst_2.RecordCount
Set rst_3 = Nothing
str_SQL_3 = vbNullString
str_SQL_3 = "Select [Artikel].[Titel] " 'wähle alle Artikel aus
str_SQL_3 = str_SQL_3 & "From [Artikel] "
Set rst_3 = dbs.OpenRecordset(str_SQL_3)
rst_3.MoveFirst
rst_3.MoveLast
count_3 = rst_3.RecordCount
If count_2 / count_3 >= sng_Warnung Then
MsgBox ("Achtung! Der Anteil der ungelesenen Artikel ist höher als " & sng_Warnung * 100 & " Prozent der gesamten Artikel!")
End If
CurrentDb.QueryDefs.Delete ("Titel")
Set qdf = CurrentDb.CreateQueryDef("Titel", str_SQL_2)
Mein Problem ist jetzt, dass er das dt_Pruefdatum1 einfach nicht mit einbezieht. Öffnet dann immer eine Inputbox "Parameterwert eingeben: dt_Pruefdatum1". Bei Eingabe eines Datum selektiert er für str_SQL_2 dann auch die richtigen Artikel, aber die Berechnung (count2/count3....) inklusive der Messagebox spuckt er davor schon aus.
Hoffe ihr könnt mir weiterhelfen...Grüße!
|