Tekst checkbox aanpassen met macro

Status
Niet open voor verdere reacties.

Excellerend

Gebruiker
Lid geworden
8 nov 2011
Berichten
68
Beste forumleden,

Ik ben bezig een boodschappenlijst te maken met +100 artikelen.
De boodschappenlijst wordt de standaard en mag minimaal gewijzigd worden.

Bijlage bij deze post voegen resulteerde in een foutmelding dus vandaar deze link: http://www.mijnbestand.nl/Bestand-387NA3AHCWBL.xls

In dat voorbeeld-bestand staan een 4-tal producten als voorbeeld weergegeven. Op de kolom aantal na zijn alle cellen beveiligd (met password: 'test').

Zodra men in de kolom aantal een waarde invult wordt de checkbox 'ge-checkt', zodra de waarde verwijderd wordt verdwijnt het vinkje. Tot zover geen problemen.

Nu zijn er personen die enkel een producten willen van een bepaald merk. Dus wil ik dat men de tekst van de checkbox kan aanpassen. Zodra men op 'Volle melk' klik kan men ook daadwerkelijk de tekst aanpassen (in bv: Volle melk van campina). Het idee was dat zodra men op een product klikt er een InputBox verschijnt waarin men de nieuwe omschrijving kan invoeren. Ik heb dat met mijn zeer beprekte VBA kennis geprobeerd, wat er voor gezorgd heeft dat ik wel de tekst kan aanpassen, maar de InputBox heb ik nog nooit voorbij zien komen.. ;)

Betreffende code:
Code:
If ActiveSheet.Shapes("Check Box 1").Select Then Selection.Characters.Text = InputBox("Vult onderstaand het nieuwe product in", "Aanpassen product")

Het probleem is dat 'Check Box 1' in de code staat wat inhoudt dat ik voor iedere checkbox (dus meer dan 100, per product 1) een andere macro moet maken. Ik hoop dat jullie mij kunnen helpen met een betere code, liefst 1 voor alle checkboxen!

Alvast bedankt.

Peter
 
In de bladmodule van Sheet1.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C4:C7")) Is Nothing Then
        With ActiveSheet
            .Unprotect Password:="test"
            If .CheckBoxes("Check Box " & Target.Row - 3).Select Then Selection.Characters.Text = InputBox("Vult onderstaand het nieuwe product in", "Aanpassen product")
             On Error GoTo 0
            .Protect Password:="test"
        End With
End If
End Sub
 
Beste Rudi,

Bedankt voor het meedenken en je antwoord. Je code werkt voor 90%, en klopt voor 90% ;) maar is helaas niet helemaal wat ik zou willen. Het resultaat van jou code is dat zodra je een waarde invult in de kolom 'aantal' er altijd een InputBox verschijnt met 'aanpassen product'. Waarschijnlijk zijn van de 100 artikelen er 90 goed, en hoeft die InputBox in 90% van de gevallen niet te verschijnen. Het zou mooi zijn als men op kolom B4 : B7 klikt (dus op de checkboxen) er dan die InputBox verschijnt (om het product aan te passen). Verder werkt de code bij het laatste product niet (cel C7), krijg de melding "Run-time error '1004': Unable to get the Checkboxes property of the Worksheet class".

Nogmaals (&alvast) bedankt,

Peter
 
Dan zal je gebruik moeten maken van ActiveX-Checkboxes, die hebben nl een Click-event dat je kan gebruiken om de macro te triggeren. Formulier-checkboxes hebben dit event niet.
 
Beste Rudi,

Zonder te twijfelen aan jouw kennis, maar in mijn voorbeeldbestandje kan je de tekst van checkbox1 aanpassen door erop te klikken. Ik lees in jouw antwoord dat er niet één algemeen code te maken valt dat geldt voor alle checkboxen, klopt dat? Of is er toch een mogelijkheid?

Mvg,
Peter
 
Je kan deze idd handmatig aanpassen maar je kan er geen macro mee triggeren (dus ook geen inputbox). Dit kan enkel met ActiveX-objecten (en het Click-event).
Dat is nu eenmaal 1 v/d verschillen tussen beide objecten. Formulier-objecten kan je wel met een macro wijzigen, maar je kan er niet automatisch een macro mee starten (behalve de formulierknop waaraan je een macro verbonden hebt natuurlijk)
 
Beste Rudi

Oké, helemaal duidelijk. Is het dan wel mogelijk één code te maken die ervoor zorgt dat zodra je op een willekeurige checkbox klikt, de beveiliging wordt opgeheven en je handmatige de checkbox-tekst wijzigt. (zonder het gebruik van een InputBox). Die code staat al voor een groot deel in het voorbeeld-bestand, maar die geldt enkel voor checkbox1, heb weinig zin om 100+ macro's te maken waar jij, met je bijna onuitputtende VBA kennis, mij misschien wel een hoop tijd kan besparen! ;) (samenvattend, is er een VBA term die 'checkbox1' vervangt voor een term die geld voor alle checkboxen)

Mvg,
Peter
 
Dit was een uitdagingkje :d
Wijs aan alle selectievakjes dezelfde macro aan nl Tekst_Aanpassen
Code:
Sub Tekst_aanpassen()
    ActiveSheet.Unprotect Password:="test"
        If ActiveSheet.CheckBoxes("Check Box " & ExtractNumber2(Application.Caller)).Select Then
            Selection.Characters.Text = InputBox("Vult onderstaand het nieuwe product in", "Aanpassen product")
        On Error GoTo 0
        End If
    ActiveSheet.Protect Password:="test"
End Sub

Function ExtractNumber2(rC As String) As String
    With CreateObject("VBSCRIPT.REGEXP")
        .Pattern = "[^0-9]"
        .Global = True
        .IgnoreCase = True
        ExtractNumber2 = .Replace(rC, "")
    End With
End Function
 
Beste Rudi

Geniaal, ontzettend bedankt!

Had het zaterdag al snel thuis getest en dat zag er veelbelovend uit, hier op het werk in de juist sheet toegepast, en geheel in lijn der verwachting...het werkt!
Het was mij een eer een uitdaging(kje) voor je gecreëerd te hebben! ;)

Mvg,
Peter
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan