abonnement Unibet Coolblue
pi_59329199
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Checkbox4_change
   If Checkbox3.Value = False Then
      Exit Sub
   Else
      If CheckBox4.Value = True Then
         Date = Worksheets("Sheet1").Range("A2").Value
         Worksheets("Sheet1").Range("A2").Value = Date + 365
      Else
         Exit Sub
      End If
   End if
End Sub

Zoiets zou je al een end mee moeten komen.

Ik test bij verandering van checkbox4 of Checkbox3 al aangevinkt is. Als dit niet het geval is is deze code niet relevant en Exit je dus. Dit kan je ook evt opvangen door dit in de code van Checkbox3 te proppen (en dus 1 & 2 voor 2 & 3):
1
2
3
4
5
6
7
Private Sub Checkbox3_Change()
   If Checkbox3.Value = True Then
      Checkbox4.Enabled = True
      [eventueel andere code]
   Else
      Checkbox4.Enabled = False
   End If

Je moet dan wel al in de properties van 2, 3 en 4 instellen dat ze standaard niet enabled zijn (grayed out). Dan kunnen ze ook niet aangeklikt worden als 1 nog niet klaar is.

Kijk even of je hier wat mee kan!
  vrijdag 13 juni 2008 @ 10:30:41 #252
14337 BierKoning
Bier 4 Ever!!
pi_59357619
Hey hartstikke mooi! Het met een jaar optellen werkt in elk geval erg mooi zo. Het begin is er!

Aangezien ik zelf eigenlijk geen ervaring heb met VBA, maar het toch wel aardig logisch in elkaar lijkt te steken, heb jij toevallig wat sites met commando's? Dan kan ik zelf ook wat uitproberen.

Zo ben ik nu aan het zoeken hoe ik met 1 checkbox, alle checkboxes kan un-checken op 1 RIJ. Op die manier kan je dus handmatig een soort van 'loop' genereren.
pi_59357820
Ik heb het mezelf aangeleerd op een stage, daarbij een aantal e-books gewoon gezocht via Torrents. Veel dingen van VBA zijn niet te gebruiken in Excel (zoals Timer) maar alle basiscommando's kan je al een eind mee komen.

Probeer ook eens mee te lezen op www.mrexcel.com en dan naar Messageboards...daar zitten fantastische programmeurs, en op de site zelf staan erg goede artikelen.

Wat ook goed helpt, vooral met bijvoorbeeld kopiëren/plakken, opmaak, printen, formules in cellen plaatsen etc, is de Macro recorder. Je klikt dan op Opnemen/Record, doet je ding en stopt hem dan. Je kan dan de gegeneerde code zelf bekijken. Ook daar kan je erg veel van leren al heb je vaak wel veel code (je kan het meestal een flink stuk inkorten).

Succes.
  vrijdag 13 juni 2008 @ 10:58:11 #254
14337 BierKoning
Bier 4 Ever!!
pi_59358277
Na wat prutsen kwam ik tot de volgende code:

1
2
3
4
5
6
7
8
9
Private Sub CheckBox1_Change()
    If CheckBox1.Value = True Then
        CheckBox2.Value = False
        CheckBox3.Value = False
        CheckBox4.Value = False
    Else
        Exit Sub
    End If
End Sub


Nog niet perfect, maar het is een begin! :)
pi_59358501
Gewoon prutsen, je komt er wel
Als je er niet uitkomt horen we het wel weer!
  vrijdag 13 juni 2008 @ 11:34:22 #256
14337 BierKoning
Bier 4 Ever!!
pi_59359256
Ahh kijk, weer een stap verder.

Ik had het eerst aan het werk dat ik door middel van 1 checkbox aan te vinken, alle andere checkboxjes uit-vinkte, maar dat is weer niet handig, want dan moet ik dus ook weer de checkbox die alle checkboxjes uncheckt, handmatig unchecken (mooie formulatie :D ).

Nu heb ik het dus met een commandbutton gedaan door middel van:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton1_click()
If CommandButton1.Enabled = True Then
        CheckBox1.Value = False
        CheckBox2.Value = False
        CheckBox3.Value = False
        CheckBox4.Value = False
    Else
        If CommandButton1.Enabled = False Then
            Exit Sub
        End If
    End If
End Sub


Nu heb ik een vraag, wel een aantal stappen vooruit. Stel ik heb dit allemaal mooi aan het werk, en ik maak een nieuwe rij aan. Dan kan ik door middel van pull-down menu's de overige data mooi, netjes en snel invoeren, de relevante data invoeren enz. Maar dan kom ik tot de checkboxes en buttons. Is er ook een manier om die automatisch te genereren? Dus iets als: "wanneer een nieuwe rij wordt aangemaakt dan: "plaats een checkbox in "B4, B8, B12, B16" en een command button in "B17" met de eigenschappen van "A4, A8, A12, A17" en button "A17".
pi_59359595
Op die laatste vraag zou je even moeten Googlen, dat weet ik zo niet. Je kan wel via het change_event testen of er een nieuwe rij wordt toegevoegd, maar hoe weet ik niet. Of het überhaupt handig is dan buttons toe te voegen lijkt me ook niet, want waar haal je dan de bijbehorende code vandaan? Gewoon de boxes al maken, en de code erin kopiëren met andere namen voor de checkboxes.

Je code:
De If-statement is niet nodig. Een Commandbutton is geen Boolean (Boolean = een variabele die TRUE of FALSE is). Hij wordt aangeklikt, voer dan de code uit. Thats it.

Je kan dus volstaan met:
1
2
3
4
5
6
Private Sub CommandButton1_click()
        CheckBox1.Value = False
        CheckBox2.Value = False
        CheckBox3.Value = False
        CheckBox4.Value = False
End Sub

Daarnaast raad ik je aan zo snel mogelijk over te stappen naar het renamen van je Checkboxes (kan in de Properties onder Name) met de (volgens mij) Hungarian Notation. Dit maakt je code voor jezelf (en evt voor anderen) een stuk leesbaarder. Vaak wordt het afgeraden maar voor projecten voor mezelf ben ik er altijd erg blij mee. Zie hier voor korte uitleg. Het houdt kort in dat je bijvoorbeeld als naam gebruikt:

Voor een checkbox chkNaam
Voor een button btnNaam
etc.

[ Bericht 61% gewijzigd door DaFan op 13-06-2008 11:57:14 ]
pi_59359897
Voor goede boeken moet je eens kijken naar O'Reilly trouwens.
  vrijdag 13 juni 2008 @ 12:49:12 #259
14337 BierKoning
Bier 4 Ever!!
pi_59360938
Ik snap niet zo goed dat wanneer ik de code om een jaar bij een datum op te tellen:

1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Chk_1_4_Change()
   If Chk_1_3.Value = False Then
      Exit Sub
   Else
      If Chk_1_4.Value = True Then
         Date = Worksheets("Sheet1").Range("A2").Value
         Worksheets("Sheet1").Range("A2").Value = Date + 365
      Else
         Exit Sub
      End If
   End If
End Sub

Deze code zich eindeloos kan herhalen wanneer je de checkbox uncheckt en weer checkt. Telkens wordt er een jaar bij op geteld.

Wanneer ik een andere code maak om van de datum in cel A1 er 2 maanden bij op te tellen en dit te genereren in cel B1, met de code:

1
2
3
4
5
6
7
8
9
10
Private Sub Chk_A1_Change()
        If chk_A1.Value = True Then
            Date = Worksheets("Sheet1").Range("A1").Value
            Worksheets("Sheet1").Range("B1").Value = Date + 61
     Else
        If chk_A1.Value = False Then
                Exit Sub
            End If
    End If
End Sub

dit slechts 1 keer kan gebeuren. Alleen de eerste keer dat ik de checkbox aanvink wordt er netjes een nieuwe datum + 2 maanden in cel B1 geplaats. Maar wanneer ik hem uncheck en weer aancheck, gebeurd er niks meer.

Terwijl dit toch eigenlijk makkelijk zou zijn :)
pi_59361104
In de eerste code haal ik de datum uit een box die daarna met een jaar opgehoogd wordt en in de zelfde cel wordt geplaatst. Die wordt dus telkens met een jaar verhoogd.
Jouw 2e code daarentegen haalt de datum uit cel A1 en plaatst deze in B1. Als je daarna weer de datum uit A1 neemt blijft de uitkomst van Datum + 61 hetzelfde, waardoor B1 niet veranderd.

Je moet dus óf A1 in B1 veranderen of andersom.
  vrijdag 13 juni 2008 @ 13:25:25 #261
14337 BierKoning
Bier 4 Ever!!
pi_59361763
Dus ik zou eigenlijk moeten zoeken naar een code die eerst kijkt of er een waarde in B1 staat en wanneer er een code staat, dat hij die code, wanneer de checkbox wordt aangevinkt, verhoogd met 2 maanden.

Dat zal vast weer lastiger worden dan dat het lijkt
pi_59361988
Nee hoor daar heeft VBA een hele mooie functie voor, IsEmpty()
1
2
3
If IsEmpty(Range("B2")) = True Then
<je code>
End If

Nog even over If-statements, je hoéft dus niet altijd Else te gebruiken, alleen als je een actie wil ondernemen als de eerste statement niet waar is. Anders kan je gewoon afsluiten met End If.

Zie hier voor meer uitleg over ranges.
  vrijdag 13 juni 2008 @ 13:53:27 #263
14337 BierKoning
Bier 4 Ever!!
pi_59362536
Ik was inderdaad al tegen de "ifEMPTY" aangelopen. Toch doet ie niet wat ik wil.

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Chk_A1_Change()
    If IsEmpty("B1") = True Then
        Date = Worksheets("Sheet1").Range("A1").Value
        Worksheets("Sheet1").Range("B1").Value = Date + 61
            Else
                Date = Worksheets("Sheet1").Range("B1").Value
                Worksheets("Sheet1").Range("B1").Value = Date + 61
                If chk_A1.Value = False Then
                        Else
                    Exit Sub
                End If
        End If
End Sub


Dit leek mij het meest logische. Alleen werkt het niet zo gemakkelijk.
Wanneer ik dit laat runnen, wanneer er al een datum in B1 staat, dan is er niks aan de hand en wordt B1 netjes met 2 maanden opgehoogd bij elke aanvink. Is B1 leeg, dan zegt hij "Type Mismatch" en geeft hij aan dat er een fout zit in de 2e "Date = Worksheets("Sheet1").Range("B1").Value".

Nu lijkt me dat dat komt omdat de cel leeg is, maar dat lost hij toch op door de eerste voorwaarde? :?
pi_59362790
In kolom A staan artikel omschrijvingen met meer dan 30 karakters. Deze mogen max. 30 karakters zijn, ik wil de inhoud van de cellen in kolom A afkappen naar 30 karakters (dat lukt nog wel), maar de karakters na het 30e karakter moeten in kolom B geplaatst worden. Dat lukt dus niet, iemand een oplossing? Kan ik een soort ALS formule maken i.c.m. karakters tellen?
Standin' around, looking cool and shit, I want y'all motherfuckers to jump the fuck up!
pi_59362827
Maak van je True eens een False?

Deze:
If IsEmpty("B1") = True Then

naar
If IsEmpty("B1") = False Then
  vrijdag 13 juni 2008 @ 14:07:06 #266
15967 Frollo
You know I am a righteous man
pi_59362867
quote:
Op vrijdag 13 juni 2008 14:03 schreef galbrecht het volgende:
In kolom A staan artikel omschrijvingen met meer dan 30 karakters. Deze mogen max. 30 karakters zijn, ik wil de inhoud van de cellen in kolom A afkappen naar 30 karakters (dat lukt nog wel), maar de karakters na het 30e karakter moeten in kolom B geplaatst worden. Dat lukt dus niet, iemand een oplossing? Kan ik een soort ALS formule maken i.c.m. karakters tellen?
Ik denk dat je sowieso met een kolom extra moet werken.
In A komt de oospronkelijke tekst, in B de eerste 30 tekens en in C de rest.

In B komt dan:
=LINKS(A1;30)

En in C:
=ALS(ISFOUT(RECHTS(A1;LENGTE(A1)-30));"";RECHTS(A1;LENGTE(A1)-30))

of (eigenlijk beter):
=ALS(LENGTE(A1)>30;RECHTS(A1;LENGTE(A1)-30);"")

[ Bericht 3% gewijzigd door Frollo op 13-06-2008 14:15:34 ]
pi_59362927
quote:
Op vrijdag 13 juni 2008 14:03 schreef galbrecht het volgende:
In kolom A staan artikel omschrijvingen met meer dan 30 karakters. Deze mogen max. 30 karakters zijn, ik wil de inhoud van de cellen in kolom A afkappen naar 30 karakters (dat lukt nog wel), maar de karakters na het 30e karakter moeten in kolom B geplaatst worden. Dat lukt dus niet, iemand een oplossing? Kan ik een soort ALS formule maken i.c.m. karakters tellen?
Dit gaat in B1. Ik kan hem alleen in het Engels, sorry, voor vertalingen moet je maar even hier kijken:
http://dolf.trieschnigg.nl/excel/excel.html
1=IF(LEN(A2)>30,RIGHT(A2,LEN(A2)-30),"Niet meer dan 30")

NL:
1=ALS(LENGTE(A2)>30,RECHTS(A2,LENGTE(A2)-30),"Niet meer dan 30")


Dit resulteert in:
1
2
abcdefghijklmnopqrstuvwxyz        Niet meer dan 30
abcdefghijklmnopqrstuvwxyzabcdef  ef

Hoop dat dit helpt.
pi_59363117
Jep het is gelukt met die formule van DaFan, die was toch iets makkelijker dan die van Frollo Beiden iig bedankt!
Standin' around, looking cool and shit, I want y'all motherfuckers to jump the fuck up!
  vrijdag 13 juni 2008 @ 14:18:37 #269
14337 BierKoning
Bier 4 Ever!!
pi_59363158
quote:
Op vrijdag 13 juni 2008 14:05 schreef DaFan het volgende:
Maak van je True eens een False?

Deze:
If IsEmpty("B1") = True Then

naar
If IsEmpty("B1") = False Then
Dan genereerd hij netjes een nieuwe datum. Alleen maakt hij geen nieuwe data aan wanneer ik daarna nog een aantal keer doorklik. Verplaats ik de code ook omhoog (wissel ik het om) dan krijg ik hetzelfde als wanneer ik hem op True heb staan (is ook logisch).

pi_59363433
Heb je A1 en B1 als datum geformat of als custom?
Je moet B1 hetzelfde hebben als A1. Ik denk dat B1 als String oid wordt gezien, die kan je niet toewijzen via .Value (moet met .Text, maar dat is hier niet relevant).
pi_59426477
Mensen,

Als ik verwijs naar cel a2 in een formule, en ik verwijder a2, dan geeft excel een foutmelding in de formule: #VERW!. Is het mogelijk dat excel deze foutmelding níet geeft en de formule intact laat, en dus naar de nieuwe a2 verwijst?
pi_59426704
ik zou dan:
=als(a2="';"";<de rest van je formule>)
gebruiken.
Mocht a2 leeg zijn dan toont hij niks en anders het resultaat van je formule.
pi_59427225
quote:
Op maandag 16 juni 2008 11:12 schreef el_godi het volgende:
ik zou dan:
=als(a2="';"";<de rest van je formule>)
gebruiken.
Mocht a2 leeg zijn dan toont hij niks en anders het resultaat van je formule.
Ja dat ik heb inderdaad. Maar de gegevens in a2 worden met een macro opnieuw ingeladen. Deze verwijderd eerst a2 en plakt er dan nieuwe gegevens in. Daar komt de foutmelding vandaan..
pi_59427843
Laat dat stuk van je macro eens zien?
pi_59430192
het niet gaat direct om de macro. De macro sorteert en verwijdert een aantal kolommen. Daarom geeft de formule die naar die cellen verwijst een foutmelding. Is dit te voorkomen? Dat excel dus geen foutwaarde geeft als een celverwijzing verwijdert wordt?
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')