Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBa] Meerdere if-statements achter elkaar*

Pagina: 1
Acties:

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Ik heb in excel een bestandje met allemaal checkboxen.
nu wil ik dat als checkbox2 en checkbox3 aangevinkt zijn dat ik als uitkomst 3,5 moet krijgen in een
andere cel..dit wil ik ook met andere checkboxen zoals 3+4 moet 3,5 worden enz.

Maar zodra er maar 1 is aangevinkt zoals alleen 2, moet er in die cell 2 komen te staan. mocht alleen 3 zijn aangevinkt 3 enz.

Dit probeer ik met VBA maar het lukt me gewoon niet.

ik heb op het moment dit:

If CheckBox2 = True And CheckBox3 = True Then Range("H" & 15).Value = 2.5
If checkbox2 = true then Range("H" & 15).Value = 2

Als ik dit doe dan werkt het alleen als ik eerst vakje 1, en dan vakje 2 aanvink, andersom werkt dit niet. Ik heb het ook geprobeerd met een If...Then...Else, en een If...Then...Elseif, maar hier werkt het helemaal niet.

Iemand suggesties?

Edit: die code werkt overigens ook niet, maakt niet uit wat ik doe, ik blijf alleen 2 krijgen

[ Voor 8% gewijzigd door fopspeen op 05-09-2008 08:46 ]


  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik heb geen idee of het iets uitmaakt in excel maar heb je het al geprobeerd met haakjes?
(zoals gezegd geen idee of het iets uitmaakt maar het is de moeite waard het te proberen :) )

Modelbouw - Alles over modelbouw, van RC tot diorama


  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Ik heb het even geprobeerd, maar dit maakt niks uit.
Zodra ik checkbox 2 + 3 pak dan blijf ik maar op 1 manier de 2,5 houden namelijk eerst 3 dan 2.
en zodra ik checkbox 1 + 2 pak dan krijg ik het ook op 1 manier als ik eerst 1 dan 2 doe.

Helaas werkt het niet :)

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 28-11 11:55
Dat komt omdat je eerst zegt dat het 2.5 is, vervolgens ga je checken op checkbox2. Die staat aan, net als in je eerse if dus wordt alles 2.
Visual Basic .NET:
1
2
3
4
5
6
7
if checkbox2 = true
if checkbox3 = true
Then Range("H" & 15).Value = 2.5
else
Range("H" & 15).Value = 2
endif
endif

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


  • pkuppens
  • Registratie: Juni 2007
  • Laatst online: 17-11 23:50
is Excel case sensitive? + What Jogai said.

En compleet anders benaderen wil ook wel eens helpen.

BoxCount := 0;

if (CheckBox1) then Value := 1; BoxCount := BoxCount+1;
endif (precieze syntax van VBA ben ik kwijt.

if (CheckBox2) ....

if (BoxCount > 1) -> 3.5

etc.

[ Voor 101% gewijzigd door pkuppens op 05-09-2008 09:14 ]


Verwijderd

Excel gebruikt toch gewoon VBScript? Dat niet case sensitive.
Maar Jogai heeft het probleem boven water gehaald ;)
Tweede if moet je een else if van maken.

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Ja dat gaat wel, echter heb ik het enigzins al anders werken.
Ik heb een regel van 5 boxen, en er mogen er maximaal 2 geselecteerd worden..dus als ik 3 aanvink, mogen 0, 1 en 5 niet meedoen enz. Nu heb ik het zo dat ik als ik 3 aanvink 2 krijg, als ik 2 + 3 aanvink 1,5 krijg andersom ook 2,5. Als ik 3 + 4 aanvink 3,5 heb en anderom ook 3,5...

Maar zodra ik 3 + 4 aanvink, krijg ik 3,5 te staan..zodra ik er dan 1 uitvink dus bijv. 4, dan zou er 3 moeten komen te staan. Maar dit gebeurt echter niet, er komt niks meer te staan :O

dit is mijn code (misschien een beetje stom neergezet hoor :$)

Private Sub CheckBox3_Click()

If CheckBox3 = True Then CheckBox0 = False
If CheckBox3 = True Then CheckBox1 = False
If CheckBox3 = True Then CheckBox5 = False

If CheckBox3 = True And CheckBox2 = False Then Range("H" & 15).Value = 3
If CheckBox3 = True And CheckBox4 = False Then Range("H" & 15).Value = 3
If CheckBox3 = True And CheckBox2 = True Then Range("H" & 15).Value = 2.5
If CheckBox3 = True And CheckBox4 = True Then Range("H" & 15).Value = 3.5
If CheckBox3 = False And CheckBox2 = True Then Range("H" & 15).Value = 2
If CheckBox3 = False And CheckBox4 = True Then Range("H" & 15).Value = 4
If CheckBox3 = False Then Range("H" & 15).Value = ""
If CheckBox3 = False And CheckBox2 = False Then Range("H" & 15).Value = ""
If CheckBox3 = False And CheckBox4 = False Then Range("H" & 15).Value = ""


End Sub

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Stel je pakt even alleen deze twee condities:
Visual Basic:
1
2
If CheckBox3 = True And CheckBox2 = True Then Range("H" & 15).Value = 2.5
If CheckBox3 = True And CheckBox4 = True Then Range("H" & 15).Value = 3.5

Wat als nou CheckBox2 én CheckBox4 gezet worden? Beide if's worden dan doorlopen, met als resultaat dat er uiteindelijk 3.5 in je cel komt te staan omdat dat toevallig de laatste If in de code was.

Uiteindelijk heb je, als CheckBox3 true is, 4 verschillende condities:
CheckBox2 = false en CheckBox4 = false
CheckBox2 = true en CheckBox4 = false
CheckBox2 = false en CheckBox4 = true
CheckBox2 = true en CheckBox4 = true

Diezelfde condities heb je overigens ook weer als CheckBox3 false is.

Je kunt het oplossen met geneste ifs, of door in elke if de statussen van alle drie de checkboxes te controleren.

[ Voor 34% gewijzigd door .oisyn op 05-09-2008 10:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Je moet het denk ik helemaal even opnieuw opschrijven en van te voren bedenken wat je wil, welke mogelijkheden er zijn etc... Het lijkt me zo dat er een X aantal states zijn. Omdat je een tig aantal if statements achter elkaar plaatst is het ook erg onoverzichtelijk omdat waarden telkens overschreven worden.
Om het eenvoudig te maken zou ik om te beginnen alle states opschrijven en if else statements gebruiken

code:
1
2
If CB3 = True And CB2 = False Then ....
Else If CB3 = True And CB4 = False Then ....



Wanneer je met jouw code 3+4 aanvinkt komt er 3,5 uit.
Zie
code:
1
If CheckBox3 = True And CheckBox4 = True Then Range("H" & 15).Value = 3.5


Maar wanneer je daarna 3 uitvinkt gebeurt er dit:
code:
1
2
If CheckBox3 = False And CheckBox4 = True Then Range("H" & 15).Value = 4
If CheckBox3 = False Then Range("H" & 15).Value = ""


Regel 1 maakt de waarde 4 (CB3 staat immer uit en CB4 nog aan)
Regel 2 overschrijft meteen de waarde met "" omdat CB3 uit staat

Edit: verkeerde regel gepaste.

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
.oisyn schreef op vrijdag 05 september 2008 @ 10:23:
met als resultaat dat er uiteindelijk 3.5 in je cel komt te staan omdat dat toevallig de laatste If in de code was.
ja ik had het al gezien, het werkt gewoon nu. Ik moet de regels met de lege cellen weg gehaald. want ik heb voor 5 vakjes datzelfde geprogrammeerd alleen telkens de checkbox nummers en values veranderd..

als ik 3 + 4 had, kreeg ik 3,5 maar zodra ik 4 weg deed vinken, kreeg ik niks omdat 3 true was en 4 false..en dat zou 3 moeten worden, maar op het einde zeg ik ook als 3 false is en 4 true dan "" niks dus.. en daar lag mijn fout. 8)7

Maar het werkt nu, en mijn vakjes doen precies wat ik wil!

Hartstikke bedankt! :)

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Phoeba je hebt gelijk ik had het zelf al door, maar evengoed bedankt! ;)

Verwijderd

Ik ben geen VBA expert, begrijp me goed, maar kan je ze niet in een array duwen?!?

Pak me niet op de syntax maar dan kan je iets doen als:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim i, Total, Increment
Total = 0
Increment = 0

for i = 1 to CheckBoxArray.Length
  if (CheckBoxArray[1].CheckBox) then
    if (Increment < 2) then ' Test niet meer dan 2 checkboxen aangevinkt.
      Total = Total + i
      Increment = Increment + 1 ' Waarom implementeert vb niet gewoon Increment++; ????
    end if
  end if
next

Range("H") & 15).Value = Total / Increment


Ofzo. Gaat er wel vanuit dat de eerste checkbox in je array ook waarde 1 heeft, indien dat twee is dan moet je natuurlijk effe een +1 erin zetten.

Overigens zou ik het feit dat je niet meer dan 2 checkboxen mag aanvinken niet oplossen zoals hierboven want dan wordt het nogal smerig & ondoorzichtig voor de gebruiker.

  • Ruben314
  • Registratie: Juli 2001
  • Laatst online: 04-11 21:14
ik weet niet precies wat je zoekt, maar is het volgende idee niet handiger?
Niet in VB, want dat ken ik niet zo goed

result = "";
if (checkbox1.checked == true) then result = result + "1"
if (checkbox2.checked == true) then result = result + "2"
... etc ....
Cell.value = result.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Als je het hebt over VBa in bijvoorbeeld Excel, dan past dit topic beter in Officesuites en -software

Vandaar een klein schopje die kant op.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Oke, mijn excuses hiervoor.

Maar ik heb mijn excel sheet al af, en het werkt gewoon. :) Evengoed bedankt voor de reacties. Dit hoeft niet meer aangepast te worden.

Alleen krijg ik een runtime error.
Dit is een excel sheet voor gebruikers, die beoordelingslijsten moeten invullen. Dus de uitslagen mogen niet beïnvloed worden of veranderd. Dus heb ik alle cells gelockt behalve de cellen die aangepast mogen worden zoals Naam, functie enz. Ook zijn de checkboxen niet gelocked. Maar zodra ik nu een checkbox wil aanklikken krijg ik een runtime error, ik verwacht dat mijn macro gelockt is en niet werkt aangezien ik de sheet geprotect heb. Ik heb al gezocht op het internet maar google was in dit geval niet mijn vriend, wel van allerlei oplossingen maar niet echt iets dat van toepassing is op mij..:$ is er misschien iemand die dit beter weet hoe dit ongeveer met checkboxen werkt?

Deze oplossing heb i kgevonden, maar maakt dit niet de hele sheet unprotected?

Visual Basic .NET:
1
2
3
4
5
Sheet1.Unprotect Password:="Secret"

    'YOUR CODE

    Sheet1.Protect Password:="Secret"

[ Voor 9% gewijzigd door fopspeen op 09-09-2008 11:03 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Je unprotect de sheet en na afloop van de code protect je hem weer. Moet je wel je protectstatement in je foutafhandeling zetten. Mooier imho is om de flag ui-only te zetten.
In het direct scherm: sheet.protect Password:="xxx" UiOnly:=true

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Lustucru schreef op dinsdag 09 september 2008 @ 11:10:
Je unprotect de sheet en na afloop van de code protect je hem weer. Moet je wel je protectstatement in je foutafhandeling zetten. Mooier imho is om de flag ui-only te zetten.
In het direct scherm: sheet.protect Password:="xxx" UiOnly:=true
Maar zodra ik dan de sheet op unprotect heb, zijn dan ook de locked veldjes aan te passen?
dat is namelijk wat ik juist niet wil..die veldjes moeten gelockt blijven, terwijl gebruikers daar gewoon hun beoordelingen in kunnen aanvinken. snap je het een beetje?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Knappe jongen die in de milliseconde dat de code loopt je sheet gaat bewerken 8)7 en as said er is nog een flag userinterfaceonly. Beter lezen dus.

Of bescheidener: nee ik snap er niks van. ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Ja oke, ik bedoelde of je begreep wat ik bedoelde of zoiets..maargoed O:)
Verder zal ik het eens gaan proberen wat je zei, op de hoop dat het lukt.

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
ehm, misschien een beetje domme vraag, maar hoe moet ik dat nu precies erin zetten? 8)7
onder elke checkbox? Want zodra je een checkbox aan klikt loopt het toch alleen die paar regeltjes programma door? dan zou ik dan bij elke checkbox moeten zetten lijkt me..

Ik heb daar overigens ook geen error handler ingebouwd :o

[ Voor 10% gewijzigd door fopspeen op 09-09-2008 14:06 ]

Pagina: 1