15. april 2002 - 13:05Der er
26 kommentarer og 1 løsning
VBA-funktion til enable/disable en knap
Funktionen skal kigge i tabellen Log, hente feltet Dato, checke om der er en forekomst af Dato-feltet der er over 6 mdr. gammel. Hvis ja, skal knappen knpSletLogfil være "enabled". Hvis nej, skal knappen være "disabled". Her er hvad jeg har indtil videre:
Private Sub Form_Open(Cancel As Integer) Dim TheDate As Date Dim Msg TheDate = InputBox("Enter a date") Msg = DateDiff("m", Now, TheDate) If Msg > 6 Then knpSletLogfil.Enabled = True Else knpSletLogfil.Enabled = False End If End Sub
Jeg får en fejl i linien Msg = DateDiff("m", Now, TheDate"): TYPE MISMATCH
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Der er nogle ting her, som ikke helt passer sammen: Din msg vil aldrig blive støøre end 6, da tallet giver et negativt tal (med mindre at man taster en dato ud i fremtiden)
Endvidere laver denne løsning jo ikke noget opslag i tabellen! Alt er baseret på det, som brugeren indtaster....?
Undskyld, det var noget gammelt kode jeg fik pastet.........beklager. Spørgsmålet er hvor jeg kan finde noget info om hvordan man slår op i databasen vha recordset eller hvad det nu hedder.
Jeg vil umiddelbart sige at Online-hjælpen indeholder alt hvad man behøver. Åbn hjælpen inde fra Visual Basic og søg efter "Recordset". Problemet er så bare at det virker totalt uoverskueligt med alle de hits :o(
Princippet er at du definere et object, som repræsenterer en tabel eller forespørgsel (f.eks. kaldes rs)
Dette rs kan du så søge og bladre i, ligesom du kan oprette, redigere og slette poster.
Dette link indeholder en (så vidt jeg ved) fuldstændig dokumentation af ADO (som er datamodellen og den som leverer Recordset-objektet): http://www.microsoft.com/data/ado/adotechinfo/dao2ado.htm Her er en masse rigtig gode eksempler, selvom niveauet ofte kan være højt.
Ellers vil jeg anbefale dig at købe en Access VBA-bog, som helt sikkert vil gennemgå Recordsets. På engelsk kan jeg anbefale: Beginning Access 2000 VBA udgivet af forlaget WROX.
Ellers giver jeg da gerne lidt undervisning/konsulentassistance ;o)
Hmmm...........jeg tror jeg er lidt på vildspor....hvis du glemmer min kode lidt......hvordan ville du løse problemet? (Funktionen skal kigge i tabellen Log, hente feltet Dato, checke om der er en forekomst af Dato-feltet der er over 6 mdr. gammel. Hvis ja, skal knappen knpSletLogfil være "enabled". Hvis nej, skal knappen være "disabled".)
Private Sub Form_Open(Cancel As Integer) if DCount("*", "Log", "Dato < " & Dateadd("m",-6, now)) > 0 then knpSletLogfil.Enabled = True Else knpSletLogfil.Enabled = False End If End Sub
Det kan sådan set gøre kortere: Private Sub Form_Open(Cancel As Integer) Me!knpSletLogfil.Enabled = DCount("*", "Log", "Dato< DateAdd('m', -6, Now)") end sub
Well, jeg får forskellige fejl, afhængig af hvilken løsning jeg bruger: "Udtrykket, du har indtastet som en forespørgselsparameter, gav fejlen Objektet indeholder ikke Automations-objektet "Date". (ved brug af koden fra 13:52:44)
Bortset fra det, så bør koden også ligge på Form_Load i stedet for Form_Open. Men hvis det ikke giver nogle problemer som det er nu, så behøver du ikke at flytte det. Der er bare mange egenskaber, som man ikke kan sætte på Form_Open, da formularen endnu ikke er færdig-indlæst på det tidspunkt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.