[Access/VBA] Schakelbord

Pagina: 1
Acties:
  • 305 views sinds 30-01-2008
  • Reageer

  • Wackmack
  • Registratie: Oktober 2003
  • Laatst online: 10-02 15:06
Hallo,

Afgelopen maanden heb ik een mooie database voor mijn stage maakt. Het werkt echt super en genereert zelf automatisch datums. Dus als ik 1 datum invoeg staat hij er gelijk tot 2008 in.

Maar nu wou ik als laatste mijn schakelbord maken. Ik heb hem al ingevult maar krijg ik foutmelding, misschien weten jullie er iets van.

Het vet gedrukte is volgens Access de foutmelding.

Option Compare Database
Option Explicit

Private Sub Form_Open(Cancel As Integer)
' Het databasevenster minimaliseren en het formulier initialiseren.

' Naar de schakelbordpagina gaan die is gemarkeerd
' als standaard.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Standaard' "
Me.FilterOn = True

End Sub

Private Sub Form_Current()
' Het bijschrift bijwerken en de lijst met opties invullen.

Me.Caption = Nz(Me![ItemText], "")
FillOptions

End Sub

Private Sub FillOptions()
' De opties invullen voor deze schakelbordpagina.

' Het aantal knoppen op het formulier.
Const conNumButtons = 8

Dim dbs As Database
Dim rst As Recordset
Dim strSQL As String
Dim intOption As Integer

' De focus instellen op de eerste knop van het formulier
' en alle andere knoppen op het formulier verbergen.
' U kunt het veld met de focus niet verbergen.
Me![Option1].SetFocus
For intOption = 2 To conNumButtons
Me("Option" & intOption).Visible = False
Me("OptionLabel" & intOption).Visible = False
Next intOption

' De tabel Onderdelen van Schakelbord openen en het
' eerste onderdeel voor deze schakelbordpagina opzoeken.
Set dbs = CurrentDb()
strSQL = "SELECT * FROM [Onderdelen van Schakelbord]"
strSQL = strSQL & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
strSQL = strSQL & " ORDER BY [ItemNumber];"
Set rst = dbs.OpenRecordset(strSQL)

' Als er geen opties voor deze schakelbordpagina zijn, een
' bericht weergeven. Anders de pagina met onderdelen vullen.
If (rst.EOF) Then
Me![OptionLabel1].Caption = "Er zijn geen onderdelen voor deze schakelbordpagina"
Else
While (Not (rst.EOF))
Me("Option" & rst![ItemNumber]).Visible = True
Me("OptionLabel" & rst![ItemNumber]).Visible = True
Me("OptionLabel" & rst![ItemNumber]).Caption = rst![ItemText]
rst.MoveNext
Wend
End If

' De recordset en de database sluiten.
rst.Close
dbs.Close

End Sub

Private Function HandleButtonClick(intBtn As Integer)
' Deze functie wordt aangeroepen als op een knop wordt geklikt.
' intBtn geeft aan op welke knop is geklikt.

' Constanten voor de opdrachten die kunnen worden uitgevoerd.
Const conCmdGotoSwitchboard = 1
Const conCmdOpenFormAdd = 2
Const conCmdOpenFormBrowse = 3
Const conCmdOpenReport = 4
Const conCmdCustomizeSwitchboard = 5
Const conCmdExitApplication = 6
Const conCmdRunMacro = 7
Const conCmdRunCode = 8

' Een fout die als speciaal geval wordt gezien.
Const conErrDoCmdCancelled = 2501

Dim dbs As Database
Dim rst As Recordset

On Error GoTo HandleButtonClick_Err

' Het onderdeel in de tabel Onderdelen van Schakelbord opzoeken
' dat overeenkomt met de knop waarop is geklikt.
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("Onderdelen van Schakelbord", dbOpenDynaset)
rst.FindFirst "[SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]=" & intBtn

' Als geen onderdeel overeenstemt, fout melden en functie
' afsluiten.
If (rst.NoMatch) Then
MsgBox "Er is een fout opgetreden bij het lezen van de tabel Onderdelen van Schakelbord."
rst.Close
dbs.Close
Exit Function
End If

Select Case rst![Command]

' Naar een ander schakelbord gaan.
Case conCmdGotoSwitchboard
Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rst![Argument]

' Formulier openen in toevoegmodus.
Case conCmdOpenFormAdd
DoCmd.OpenForm rst![Argument], , , , acAdd

' Een formulier openen.
Case conCmdOpenFormBrowse
DoCmd.OpenForm rst![Argument]

' Een rapport openen.
Case conCmdOpenReport
DoCmd.OpenReport rst![Argument], acPreview

' Het schakelbord aanpassen.
Case conCmdCustomizeSwitchboard
' Geval afhandelen dat het Schakelbordbeheer niet
' is geïnstalleerd (bijv. bij minimale installatie).
On Error Resume Next
Application.Run "WZMAIN80.sbm_Entry"
If (Err <> 0) Then MsgBox "Opdracht niet beschikbaar."
On Error GoTo 0
' Het formulier bijwerken.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Standaard' "
Me.Caption = Nz(Me![ItemText], "")
FillOptions

' De toepassing afsluiten.
Case conCmdExitApplication
CloseCurrentDatabase

' Een macro starten.
Case conCmdRunMacro
DoCmd.RunMacro rst![Argument]

' Code uitvoeren.
Case conCmdRunCode
Application.Run rst![Argument]

' Een andere opdracht wordt niet herkend.
Case Else
MsgBox "Onbekende optie."

End Select

' De recordset en de database sluiten.
rst.Close
dbs.Close

HandleButtonClick_Exit:
Exit Function

HandleButtonClick_Err:
' Als de actie om de een of andere reden door de gebruiker
' wordt geannuleerd, geen foutbericht weergeven, maar
' doorgaan op de volgende regel.
If (Err = conErrDoCmdCancelled) Then
Resume Next
Else
MsgBox "Er is een fout opgetreden bij het uitvoeren van de opdracht.", vbCritical
Resume HandleButtonClick_Exit
End If

End Function

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Wat staat er precies in de foutmelding?

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Je knalt nogal wat (niet relevante) code neer hier. Misschien is het verstandiger om eens te kijken waar het probleem ongeveer zit en die code te posten.

Mijn idee is dat de query die je gebruikt om de onderdelen van het schakelbord op te halen niet geldig is op de dikgedrukte regel. Is bijvoorbeeld het veld SwitchboardID wel gevuld? Controleer op die locatie je query maar eens, ik verwacht dat die niet goed loopt ...

Edit: het zou wel eens kunnen zijn dat die ; aan het eind van de query op deze manier ook niet echt op prijs gesteld wordt.

[ Voor 14% gewijzigd door OZ-Gump op 23-11-2004 09:59 . Reden: toevoeging ]

My personal website


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

OZ-Gump schreef op dinsdag 23 november 2004 @ 09:57:

Edit: het zou wel eens kunnen zijn dat die ; aan het eind van de query op deze manier ook niet echt op prijs gesteld wordt.
Lijkt me stug, deze code wordt door Acces gegenereerd.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Boss
  • Registratie: September 1999
  • Laatst online: 09:35

Boss

+1 Overgewaardeerd

Wat misschien kan werken:

Open een VBA code scherm en kies het menu extra -> verwijzingen (tools -> references voor engelse versie). Zoek in de lijst naar Microsoft DAO x.x en vink die aan. Voor x.x het hoogste versienummer in de lijst nemen.

Wil soms het probleem wel verhelpen, hoewel het wel vreemd is dat het standaard schakelbord een fout geeft.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Wackmack
  • Registratie: Oktober 2003
  • Laatst online: 10-02 15:06
Hmmm bedankt ik zal gelijk is kijken
Pagina: 1