Invoermasker (middels VBA?) op een memo-veld in Access-2007

  • Onderwerp starter Onderwerp starter Meile
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Meile

Nieuwe gebruiker
Lid geworden
23 dec 2010
Berichten
4
Hallo allemaal,

De laatste tijd ben ik bezig met een aantal verbeteringen in een database in Access 2007 die fungeert als een zalen-/vergaderplanner. Elke zaal heeft een memo-veld waarin achtereenvolgens de begintijd, eindtijd en de vergadering staat vermeld. De reden dat dit in één veld staat is dat er vergaderingen zijn die repeterend terug komen; als dit in één veld staat kan deze vergadering makkelijk in zijn geheel gekopieerd en geplakt worden in het memo-veld op andere dagen.

Nu zou het wel mooi zijn als ik in dit memo-veld een soort invoermasker kan creëren: de eerste 2 karakters twee cijfers, dan een dubbele punt, dan weer 2 cijfers, dan een streepje, dan weer dezelfde combinatie als de eerste, dan twee spaties en daarna vrije tekst. Het zou er dan als volgt uit moeten zien:

Invoermasker:
__:__-__:__ ______(onbeperkt aantal karakters voor de vergadering en de extra info)
Resultaat:
20:00-22:00 Vergadering1, 15 pers, 2x koffie

Voordeel voor de gebruiker/planner is dat hij alleen de cijfers van de tijden en de vergadering hoeft in te vullen. Voordeel in de database is dat ik makkelijk queries en rapporten kan maken.

In datzelfde veld zou ook nog een tweede vergadering gepland kunnen worden. Er wordt dan simpelweg een enter gebruikt om naar de tweede regel in hetzelfde veld te gaan. Ten slotte kan er zoveel info achter staan, dat dit op de volgende regel gewoon verder gaat. Het ziet er dan als volgt uit:

19:00-21:30 Vergadering1, 40 pers, koffie pauze, beamergebruik, whiteboard,
microfoon spreker, interruptiemicrofoon.
21:45-23:15 Vergadering2, 10 pers, drinken.

De tekst achter de tijden heeft natuurlijk geen vaste lengte, want elke vergadering wordt anders genoemd en bevat weer andere extra info erachter.

Is het mogelijk hier een invoersmasker voor te maken? Begintijfd, eindtijd en daarna vrije tekst? Indien een enter in hetzelfde veld gegeven wordt, volgt weer hetzelfde invoermasker?

Het is eem memo-veld, want er wordt geregeld meer dan 255 tekens in het veld geplaatst. Dus ik vrees dat als er iets mogelijk is dat het dan VBA wordt, of niet?

Ik hoop dat iemand hier iets op kan bedenken.

Meile Buikema
 
Laatst bewerkt:
Dat gaat niet lukken met een invoermasker. Die werken zowiezo niet in Memovelden. Overigens snap ik niet waarom je voor dit soort vitale informatie één veld gebruikt; de afspraakgegevens lijken mij dermate belangrijk dat je die toch apart zou willen opslaan. Bovendien is het probleem dat je denkt te hebben (kan de afspraak niet kopieëren) niet-bestaand, want dat kan uiteraard vrij makkelijk worden gemaakt.
Mocht je toch met een memoveld willen werken, dan kopiëer je de afspraakgegevens toch naar het memoveld? Dan kun je exact de layout instellen van de gegevens in het memoveld. Dan hoor ik je denken: maar als ik gegevens kan kopieëren, dan kan dat toch ook met de hele afspraak? Precies...
 
Michel,

Hartelijk dank je reactie!

Dat dit niet ging lukken met een invoermakser wist ik al. Ik zei ook een "soort" invoermasker. Wel met hetzelfde idee maar dan middels VBA; dat dacht ik tenminste. En daarom heb ik ook bewust vermeld dat het om een memo-veld gaat.

Dat dit in één veld staat is eigenlijk gegroeid vanuit het verleden. We gebruikten eerste een "exe-programma" die de gegevens wegschreef in .dat-bestanden, maar die is onbruikbaar geworden met de aanschaf van een 64-bits computer (programma was in 16-bits geschreven). Dat is in deze database min of meer overgenomen.

Ik heb al eens geprobeerd van deze gegevens aparte velden te maken: tabel uitgerbreid met beg.tijd, eindtijd, vergadering, extra info. Is database-technisch ook veel beter heb ik mij laten vertellen.
Per zaal kunnen op dezelfde dag 3 verschillende vergaderingen plaatsvinden, dus dan krijg je zaal1-afspraak1, zaal1-afspraak2, zaal1-afspraak3, zaal2-afspraak1, zaal2-afspraak2, enz., enz., uiteraard elke afspraak met bijbehorende tijden en extra info. Op zich werkt dat perfect (tabel/formulier).

Maar hoe kan ik er dan voor zorgen dat deze 4 velden van 1 afspraak (beg.tijd, eindtijd, vergadering, extra info) tegelijk met elkaar gekopieerd kunnen worden naar een andere datum?
En hoe kan ik er dan voor zorgen dat, als er die dag al een afspraak staat, de te kopiëren afspraak in de 2e afspraak-veld van die zaal terecht komt?

Sorry, ik ben nog maar een beginneling: ik kan inmiddels wat met de layout doen, met queries en rapporten, ik kan een klein beetje met formulieren werken, tabelletje maken en dan verwerken in een formulier, enz. Het ontwerpen of iets nieuws maken staat bij mij nog in de kinderschoenen. Maar ik ben zeer leergierig!

Kun je me vertellen hoe ik die kopieslag kan inbouwen? Uiteraard snap ik dat je hier niet alles tot in detail kunt zeggen, maar misschien in verkorte versie?

Ik ben erg benieuwd.... DANK alvast weer!

Meile Buikema
 
Met een knop met VBA code kun je iets als dit maken:

Code:
Private Sub Kopieer_Click()
Dim i As Integer
    
    'Maak een kopie (Clone) van huidige recordset met te kopieëren gegegevens.
    With Me.RecordsetClone
        If Me!Herhaling = "" Then Me!Herhaling = 1
        'Zoek huidig record in recordcloneset
        .FindFirst "VergaderID = " & Me!VergaderID
        .FindFirst "EvenementenID = " & Me!EvenementenID
        'Maak een nieuw record op Basis van het ingevulde aantal.
        DoCmd.GoToRecord , , acNewRec
        'vul de gegevens in nieuw record uit de RecordsetClone.
        Me.Plaats = !Plaats
        Me.Titel = !Titel
        Me.ZaalID = !ZaalID
        Me.PersoonID = !PersoonID
        Me.BeginTijd = !BeginTijd
        Me.Eindtijd = !Eindtijd
        Me.Info = !Info
        'vul de datum in nieuw record met datum uit clone+Herhalingspatroon
        Select Case Me!Herhalingspatroon
            Case "Dag"
                Me.Datum = DateAdd("d", Me.Herhaling, FormatDateTime(!Datum, vbShortDate))
            Case "Week"
                Me.Datum = DateAdd("ww", Me.Herhaling, FormatDateTime(!Datum, vbShortDate))
            Case "Maand"
                Me.Datum = DateAdd("m", Me.Herhaling, FormatDateTime(!Datum, vbShortDate))
            Case "Kwartaal"
                Me.Datum = DateAdd("q", Me.Herhaling, FormatDateTime(!Datum, vbShortDate))
            Case "Jaar"
                Me.Datum = DateAdd("yyyy", Me.Herhaling, FormatDateTime(!Datum, vbShortDate))
            Case Else   ' Bij niks ingevuld, doen we 1 week.
                Me.Datum = DateAdd("ww", 1, FormatDateTime(!Datum, vbShortDate))
        End Select
    End With
    Me.Refresh
End Sub
Deze code zit achter een knop met de naam Kopieer. Bij klikken maakt hij een nieuw record, en worden de in het voorbeeld gebruikte velden ingevuld. Lijkt mij dat je zoiets wel kunt gebruiken.
 
Michel,

Duurde wat lang voor dat ik weer keek naar de reactie, de hele week veel met m'n werk bezig geweest (ook 's avonds).

Dank voor je script, ik ga deze binnenkort uitproberen.

Omdat ik de komende week ook nog druk ben voor mijn werk, sluit ik dit maar, anders staat ie t elang open. Mocht ik nog vragen, dan zal ik wel weer een bericht plaatsen.

Michel, nogmaals dank voor je moeite!

Meile Buikema
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan