PDA

View Full Version : Niets zo simpel als excel - of toch niet?


Teki
08-10-2007, 21:14
Ik verwacht hier in elk geval niet dat jullie mijn werk gaan opknappen, ik zoek eerder een beetje hulp om terug met de basics te beginnen.

Ik heb het ooit allemaal al eens gedaan, gepruld met vba en vbscript, maar dat is een jaartje of 5 geleden. Mijn bedoeling is echt niet om het warm water te gaan uitvinden, maar om een paar excelsheetjes die nu veelgebruikt worden te vereenvoudigen en de rapportering ietsje soepeler te maken.

Dat laatste lukt me wel, dat is gewoon rekening houden met variabelen, wat optellen en aftrekken, alles mooi groeperen, wat draaitabelletjes et voila.

Maar hoe maak je forms in godsnaam interactief?

Een voorbeeldje:

In het verenigd koninkrijk zit je met andere btw op leasingwagens, ingewikkeld systeem, maar nu is daar een duurbetaalde consultant van Deloitte een paar WEKEN mee beziggeweest. De sheet werkt, de totale kloppen, maar je hebt niets van invoercontrole, niets van uitvoercontrole, en het kost ongeveer een tweetal uur om een factuur daarmee te controleren. (idiote leasefirma's doen alles op een grote factuur van 200 pagina's, met zo'n 280 wagens en 45 cost centers is dat erg lollig)

Als ik mijn rekenmachien pak, ben ik ongeveer even snel. Maar dat is uiteraard niet de bedoeling, ik wil daar simpelweg de leasingbedragen intypen en dan moet dat ding dat maar uitrekenen.

Een eerste stap zou al zijn om voor elke wagen een checkbox te zetten, zo zie je tenminste of je em al hebt gehad of niet. Nu heb ik dat al 280x gecopyd gepaste, checkboxjes mooi opgemaakt, maar ik wil een knopje om ze allemaal uit te zetten.

Simpel, u typt dat in in google en je krijgt:

De logica zelve als je het bekijkt, MAAR HOE IN GODSNAAM VOER IK DAT UIT!

Private Sub CheckBox1_Click()
Dim cbx As OLEObject
Dim wks As Worksheet

Set wks = Sheets("Sheet1")
For Each cbx In wks.OLEObjects
If cbx.OLEType = 2 Then
If CheckBox1.Value = True Then
cbx.Object.Value = True
Else
cbx.Object.Value = False
End If
End If
Next cbx
End Sub

Het internet zegt dit:

http://www.mrexcel.com/tip038.shtml

Maar daar kom ik er nog niet mee gdvd

ecko
09-10-2007, 08:35
Misschien is het handig als we de structuur kennen van die excel file.
Is dat voor elke rij 1 wagen?

Rufus
09-10-2007, 09:47
Eerst en vooral staat er al een fout in uw code denk ik correct me if i"'m wrong :).
Set wks = Sheets("Sheet1")
For Each cbx In wks.OLEObjects
If cbx.OLEType = 2 Then
If CheckBox1.Value = True Then
cbx.Object.Value = FALSE
Else
cbx.Object.Value = False
End If
End If
Next cbx
End Sub

Anders laat je de checkboxen zoals ze zijn.

Komt nog is dat dat als je dit aan een checkbox koppelt dit echt niet handig gaat zijn.
Dit houd in die checkbox aanklikt al de andere uitgezet worden.

ja maakt best een knop deselect all die met mijn code alle checkboxen uitvinkt.

Als je meer info of voorbeeld xls bestand will pm me dan effe :)

Bavo
09-10-2007, 11:14
Wat is het nut van een if/else als uw acties dezelfde zijn dan? Het gaat erom dat als je de bovenste selecteert al die eronder worden geselecteerd, en omgekeerd.

Rufus
09-10-2007, 11:34
Wat is het nut van een if/else als uw acties dezelfde zijn dan? Het gaat erom dat als je de bovenste selecteert al die eronder worden geselecteerd, en omgekeerd.

Nja die else heb je in feite niet nodig volgens mij.
Het is gewoon als je op die knop drukt dat alle checkboxen gedeactiveerd worden.
Heb gewoon zijn code aangepast nml die true naar false gezet en er verder niet echt naar gekeken.

Bavo
09-10-2007, 11:37
Hij wilt ze ook terug aanzetten en dat werkt toch?

Rufus
09-10-2007, 11:49
Hij wilt ze ook terug aanzetten en dat werkt toch?

Bij mij leek dat in ieder geval niet te werken bizar.
Yup bavo het werkt idd effe opnieuw getest stomme fout in men vorige test gemaakt :D

Teki
09-10-2007, 21:45
mja ik krijg het niet geimplementeerd, dat is het degoutante eraan :)

Hoe maak in godsnaam de actie op die checkbox? Of desnoods op een of andere knop.

Rufus
10-10-2007, 08:37
mja ik krijg het niet geimplementeerd, dat is het degoutante eraan :)

Hoe maak in godsnaam de actie op die checkbox? Of desnoods op een of andere knop.


Ge voegt die checkbox toe aan uw excellformulier en ge dubbelklikt erop. Of via tools-> macro-> visual basic editor en daar plakt ge die code, Let wel dat je die CHeckbox1 in uw code vervangt door de juiste naam van de checkbox.

Teki
14-10-2007, 12:59
Hmm dan geeft ie een runtime error, het ziet er zo uit bij mij:

Private Sub CheckBox505_Click()
Dim cbx As OLEObject
Dim wks As Worksheet

Set wks = Sheets("master")
For Each cbx In wks.OLEObjects
If cbx.OLEType = 2 Then
If CheckBox505.Value = True Then
cbx.Object.Value = True
Else
cbx.Object.Value = False
End If
End If
Next cbx
End Sub

Op die vette regel geeft ie dan een fout, terwijl het echt wel checkbox505 is (nu snapt u meteen waarom ik ze allemaal tegelijkertijd uit wil zetten)

Bavo
14-10-2007, 20:12
misschien '=='? Ik ken geen VB, maar = lijkt een assignment.

Rufus
15-10-2007, 08:25
misschien '=='? Ik ken geen VB, maar = lijkt een assignment.

Met '=' zou het moeten lukken in VB bestaat er geen == om te vergelijken voor zover ik mij vb kan herineren. En bij mij werkt een '=' perfekt.
Welke error geeft hij juist?