Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: verplichte invoer  (gelezen 14743 keer)

0 leden en 1 gast bekijken dit topic.

Offline naam

  • Lid
  • *
  • Berichten: 65
  • Oplossing.be
verplichte invoer
« Gepost op: 02 januari 2006, 17:15:22 »
Beste kanjers,
Ik ben bezig met een administratie data base.
Nu wil ik hem graag "idioot proef" maken, dat wanneer de rode cel (ordernummer) wordt ingevuld, de andere (groene cellen verplicht ingevuld moeten worden.
Ik kom er in elk geval niet uit!!

Een heel gelukkig, gezond en wijs jaar toegewenst.
Piet
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #1 Gepost op: 02 januari 2006, 21:12:05 »
Ik zou voorstellen om met een aantal events te werken. Een eerste event zou een beetje code uitvoeren bij het invullen van de rode cel.

Als je een beetje met VBA overweg kunt, dan is het volgende wat je zult kunnen gebruiken:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("J4"), Target) Is Nothing Then

'zet je code hier

End if
End sub

De code kan bijvb. zijn dat er een msgbox komt met een waarschuwing aan de gebruiker dat hij alle groene cellen moet invoeren. Uiteraard is dit niet sluitend, als de gebruiker niet (wil) luister(t)(en), dan worden misschien niet alle groene cellen ingevuld.

Ik zou daarom een tweede event invoeren, een BeforeClose:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
' zet je code hier
End Sub

De code die je hier plaatst zou dan moeten nagaan of alle groene cellen ingevuld werden. En indien niet het geval, weigeren het bestand te sluiten.

Indien je niet veel kaas gegeten hebt van VBA, zal je afhangen van de inspanningen van de mensen op het forum hier, of zelf in de helpfile van VBA moeten snuisteren. Aan jou de keuze.

Natuurlijk is er ook nog de mogelijkheid om met de nodige ALS formules te werken. Maar dan denk ik niet dat je hetzelfde effect kan bereiken als met wat (minimale) VBA code.

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline droedel

  • Volledig lid
  • **
  • Berichten: 116
  • Oplossing.be
Re:verplichte invoer
« Reactie #2 Gepost op: 02 januari 2006, 21:27:39 »
Beste

het eenvoudigste zou zijn dat je in E1 een melding laat verschijnen indien C3 ingevuld is. Dit zou kunnen zijn: "alle groene cellen in kolom E invullen".

de formule zal je wel kennen: in E1: = als c3 <>"";"alle groene cellen in kolom E invullen";"")

succes
Vista Home Premium, 1022 MB Ram, Intel Core 2 CPU 6400 @2.13Ghz

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #3 Gepost op: 02 januari 2006, 22:25:31 »
Droedel

dat is eigenlijk mijn laatste punt: de gemakkelijkheid van de formules (simpele als-functies) gaan ten koste van het feit dat uiteindelijk de gebruiker (misschien zonder het te beseffen) niet alle groene cellen heeft ingevuld. VBA code zou meer tijd vergen om te programmeren, maar zou wel effectiever zijn.

"Naam" (kan je dat niet veranderen? = heel onpersoonlijk...) moet dan maar zelf kiezen wat het beste is.

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline naam

  • Lid
  • *
  • Berichten: 65
  • Oplossing.be
Re:verplichte invoer
« Reactie #4 Gepost op: 02 januari 2006, 22:52:46 »
Hartelijk dank voor jullie reaktie`s,

Inderdaad is "naam" onpersoonlijk zo had ik mij als try-out ingelogd maar tevens niet zo bedoeld, maar mijn naam staat ook netjes onder mijn bericht dus stel ik mij nogmaals voor aan de mensen van deze fantastische site.

Mijn naam is....
Piet!!
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #5 Gepost op: 02 januari 2006, 22:56:14 »
Welkom Piet!

Heb je al besloten wat je gaat doen? ALS-formules of wat VBA code? Indien nodig helpen de mensen je hier wel verder (vooral dan met de 2de optie veronderstel ik)

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline naam

  • Lid
  • *
  • Berichten: 65
  • Oplossing.be
Re:verplichte invoer
« Reactie #6 Gepost op: 02 januari 2006, 23:03:39 »
Beste mensen,

Mijn kennis en kunde op het gebied van vba zijn helaas beperkt, maar dat is wel hetgene wat ik zoek, zouden jullie een voorbeeldje kunnen maken zodat ik een basis heb om verder op te borduren.

BVD,
Piet
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #7 Gepost op: 02 januari 2006, 23:05:35 »
Ik flans wel iets in elkaar, dan kunnen we daarvan vertrekken.
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #8 Gepost op: 02 januari 2006, 23:57:34 »
Piet,

Kopieer dit naar VBA, bij VBAProject, VBAProject (Verplicht invullen.xls), Microsoft Excel-objecten, ThisWorkbook.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("INDEX").Activate
    Dim ingevuld As Integer
    Range("C4,C6,C7,C9,C11,C15,C19,J3,J5:J11").Select
    ingevuld = Application.WorksheetFunction.CountA(Selection)
    If ingevuld < 16 Then
        MsgBox "Er zijn nog niet ingevulde groene cellen. Vul die eerst in alvorens het bestand te sluiten." _
        & Chr(10) & "Kies Annuleren in het volgende scherm.", vbCritical
    Else
    End If
End Sub

Over het laatste ben ik nog niet uit. (Kies Annuleren in het volgende scherm.)

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline naam

  • Lid
  • *
  • Berichten: 65
  • Oplossing.be
Re:verplichte invoer
« Reactie #9 Gepost op: 03 januari 2006, 14:59:26 »
Beste W.G.

Je zit in de goede richting, alleen wil ik graag dat wanneer de button wegboeken filter (rechts) en wegboeken spuitgieterij (links) wordt geactiveerd deze controle wordt uitgeoefend.
Ik zal proberen om dit bestand naar je toe te mailen.

Bvd,
Piet
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #10 Gepost op: 03 januari 2006, 15:08:25 »
Je bedoelt dezelfde code uitvoeren, maar dan niet meer bij het opslaan?

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline naam

  • Lid
  • *
  • Berichten: 65
  • Oplossing.be
Re:verplichte invoer
« Reactie #11 Gepost op: 03 januari 2006, 15:18:43 »
klopt, ik heb het bestand naar oplossing.be gestuurd tav W.G. met de macro nummers erbij zodat je een beter inzicht heb met wat ik bedoel.

Groetjes,
Piet
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #12 Gepost op: 03 januari 2006, 15:24:42 »
ok
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline WG

  • Ervaren lid
  • ***
  • Berichten: 366
  • Geslacht: Man
  • http://www.wimgielis.be
Re:verplichte invoer
« Reactie #13 Gepost op: 03 januari 2006, 15:55:18 »
Ik heb de wijzigingen aangebracht er terug gemaild.

WG
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:verplichte invoer
« Reactie #14 Gepost op: 03 januari 2006, 17:32:57 »
WG, Naam aka Piet,

Ik hoop dat jullie wat tips ivm syntax kunnen appreciëren van een jarenlange VBA-programmeur...

Range("C4,C6,C7,C9,C11,C15,C19,J3,J5:J11").Select: in VBA is het niet nodig objecten te selecteren vooraleer je hun eigenschappen kan raadplegen. Dat stamt nog uit de oude macrotaal van Excel (XLM) en is niet efficiënt... De Worksheets("INDEX").Activate is dus ook in principe overbodig om de controle te doen...

Verder is het qua vorm beter om alle variabele declaraties boven de rest van de code te zetten... Dus Dim ingevuld As Integer is best de eerste lijn van de module...

Verder zou ik de range C4,C5,... , dus de te controleren cellen een rangenaam geven, bv: RangeToCheck, want stel dat je later die range verplaatst of rijen erboven toevoegt, is het adres C4,C5,... niet meer juist. Vermijd dus "hardcoding", zoals men dat noemt, want zo is je code niet flexibel... Bovendien kan je dan gewoon checken of alle cellen van die range zijn ingevuld, zonder op voorhand te moeten vastleggen dat dat 16 waardes zijn...

Met dit in gedachte is mijn volledige suggestie:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Application.WorksheetFunction.CountA(Range("RangeToCheck")) < Range("RangeToCheck").Cells.Count Then
    MsgBox "Alle groene cellen moeten ingevuld worden vooraleer de workbook kan gesloten worden!.", vbCritical
    Cancel = True
End If
End Sub


Met Cancel=True wordt het sluiten van de workbook afgebroken...

Succes,
Bart Verbeeck
WinXP - Excel 2000/XP/2003

 


www.combell.com