• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Checkboxes in Excel en VBA Macro

Status
Niet open voor verdere reacties.

Mistic NV

Gebruiker
Lid geworden
18 dec 2008
Berichten
12
Ik heb een klein programmatje geschreven met een "loop" voor hety overbrengen van data van sheet1 naar sheet 2 of 3 naargelang de selectie in sheet 1 (taal Nederlands of Frans)

In sheet 2 (en 3) staan checkboxes.

De bedoeling is als de gebruiker de Nederlandse taal selecteerd, dat er een marco wordt opgestart die de sheet1 leest, en deze vertaalt (tekst en cijfers) omzet naar sheet 2 (dito voor sheet 3 als de selectie op sheet 1 Frans is).

De volledige cyclus werkt als men de macro opstart in VBA en deze laat uitvoeren stap voor stap.

maar als ik de macro automatisch wil laten starten, worden de checkboxes niet gereset.
Dus, blijft de selectie altijd op de eerste lijn uit sheet1 staan.

Voorbeeld :

Als er in rij 12, kolom 10 een "S" staat vermeld, moet deze op sheet2 de chexbox 10 activeren, enz... voor de rest van de kolommen, maar dan andere checkboxes.

Als deze naar rij 13 gaat, zouden alles checkboxes FALSE moet zijn en zou d emacro opnieuw moeten kijken naar de waardes vermeld in elke kolom?

Weet iemand hoe ik deze moet resetten?
 
Zonder voorbeeldbestandje en -code is het moeilijk je te helpen zoeken naar de fout.
 
Voorbeeld van de excel sheets

In het montagerapprot invulsheet worden de gegevens ingevoerd.
Met de macro die ik maakte, loop deze todat er een lege cen wordt gevonden in kolom A

In het montagerapport resultaat komen de geveens die in het invulveld werden aangeduid.
Elke letter voorbeeld "S" of "F" (Schakelbaar of vast) moet deze het selectievakje aanduiden

Dat is net het probleem als ik de macro automtisch laat opstarten.Via VBA kan ik de macro starten stap by stap en dan werkt alles perfect.
 

Bijlagen

Voorbeeldbestand

Ik kan eventueel het voorbeeldbestand waarin ook de VBA zit doorsturen per email.
Het is te groot om dit hier op deze forum te plaatsen.
 
Ik kan eventueel het voorbeeldbestand waarin ook de VBA zit doorsturen per email.
Het is te groot om dit hier op deze forum te plaatsen.

Je kan een kopie maken en daar heel veel uit weglaten zodat het kleiner wordt. Dan zippen met bv. Winzip. Zolang de essentie van het probleem overblijft is het goed.

Wigi
 
Checkboxes in excel

Kan iemand mij helpen met de vraag die reeds gesteld is?
 
Kan iemand mij helpen met de vraag die reeds gesteld is?

Nogmaals zonder voorbeeldbestand (Excel-geen pdf) wordt dat heel moeilijk.
En zoals Wigi aanhaalde, indien het bestand te groot is, enkel de essentie overhouden.
 
Reaktie

Beste ,

Ik heb reedzs enkele pdf bestanden op de website geplaatst.
Tevens heb ik het programma doorgemaild naar wigi.
Verkleinen is niet mogelijk naar 100 kb.
Heb dit reeds getracht, maar dan moet ik de eccentie van het programma in excel (werkbladen) ook verwijderen.
 
Beste ,

Ik heb reedzs enkele pdf bestanden op de website geplaatst.

Als ik naar mijn garage bel om te zeggen dat er iets met mijn wagen scheelt, gaan zij ook vragen om er eens mee langs te komen. Zij kunnen me ook niet verder helpen als ik hen alleen wat foto's doorstuur.

Kan ik niet langsgaan, dan moet ik er maar mee leven dat de garage me niet kan helpen, dat is niet hun schuld, maar de mijne.

Verkleinen is niet mogelijk naar 100 kb.
Heb dit reeds getracht, maar dan moet ik de eccentie van het programma in excel (werkbladen) ook verwijderen.

Met de essentie van je programma zijn wij niks. Dat is mooi voor jou, maar ons helpt dat geen bal. Om je te kunnen helpen moeten we de essentie van je probleem kennen, niet van je programma.
Reproduceer je probleem in een leeg bestand, met die oplossing kan je dan aan de slag in je echt programma.
 
Tevens heb ik het programma doorgemaild naar wigi.

Klopt, maar je wil mijn mailbox niet zien van allemaal (bestanden van) mensen die even mijn tijd vragen :confused: Ik heb ook maar 24u op een dag en trek daar de grens of ik ga ... :eek:

Wigi
 
Bijlage

Beste,

Hierbij ingesloten een bijlage in ZIP (RAR).
Heb enkel het etentiele overgehouden.

In de hoop dat U mij kan helpen.
 

Bijlagen

In de macro wordt verwezen naar vinkvakken in sheet1, niet in vinkvakken in sheet4. En die wil je juist beïnvloeden, gezein je vraag.
Het lijkt me niet nodig om verschillende sheets te maken voor Frans en Nederlands. De te vertalen elementen kunnen met VBA eenvoudig als Nederlandse of Franse tekst in een cel gezet worden.
Overigens kan er nog wel wat aan de code en de opzet verbeterd worden. Vermijd select en activate; die zijn overbodig en onnodig vertragend.
Ander voorbeeld.

Code:
For j=1 to 58
   Sheet1.OLEObjects("checkbox" & j).Object.Value = False
Next
doet hetzelfde als

Code:
 Sheet1.CheckBox1.Value = False
    Sheet1.CheckBox2.Value = False
    Sheet1.CheckBox3.Value = False
    Sheet1.CheckBox4.Value = False
    Sheet1.CheckBox5.Value = False
    Sheet1.CheckBox6.Value = False
    Sheet1.CheckBox7.Value = False
    Sheet1.CheckBox8.Value = False
    Sheet1.CheckBox9.Value = False
    Sheet1.CheckBox10.Value = False
    Sheet1.CheckBox11.Value = False
    Sheet1.CheckBox12.Value = False
    Sheet1.CheckBox13.Value = False
    Sheet1.CheckBox14.Value = False
    Sheet1.CheckBox15.Value = False
    Sheet1.CheckBox16.Value = False
    Sheet1.CheckBox17.Value = False
    Sheet1.CheckBox18.Value = False
    Sheet1.CheckBox19.Value = False
    Sheet1.CheckBox20.Value = False
    Sheet1.CheckBox21.Value = False
    Sheet1.CheckBox22.Value = False
    Sheet1.CheckBox23.Value = False
    Sheet1.CheckBox24.Value = False
    Sheet1.CheckBox25.Value = False
    Sheet1.CheckBox26.Value = False
    Sheet1.CheckBox31.Value = False
    Sheet1.CheckBox32.Value = False
    Sheet1.CheckBox33.Value = False
    Sheet1.CheckBox34.Value = False
    Sheet1.CheckBox35.Value = False
    Sheet1.CheckBox36.Value = False
    Sheet1.CheckBox37.Value = False
    Sheet1.CheckBox38.Value = False
    Sheet1.CheckBox39.Value = False
    Sheet1.CheckBox40.Value = False
    Sheet1.CheckBox53.Value = False
    Sheet1.CheckBox54.Value = False
    Sheet1.CheckBox55.Value = False
    Sheet1.CheckBox56.Value = False
    Sheet1.CheckBox57.Value = False
    Sheet1.CheckBox58.Value = False
 
snb

Ik heb de code aangepast zoals hierboven vermeld.
En deze werkt al.

Alleen de juiste selectievakjes nog laten werken.

Mvg, Philippe
 
problemen met checkboxes

Als ik mijn programma laat lopen in VBA, via F8, werkt alles perfect.
Als ik mijn macro automatisch laat uitvoeren, werken bepaalde selectievakjes niet.
De data wordt uitgehaald uit sheet4 en verwerkt in sheet 1 (waar de checkboxes staan)

Code:
'baken 0 en 1 : Type bakengroep
        If ActiveCell.Offset(0, 6).Value = "SEIN" Then Sheet1.CheckBox1.Value = True
        If ActiveCell.Offset(0, 6).Value = "INFILL" Then Sheet1.CheckBox2.Value = True
        If ActiveCell.Offset(0, 6).Value = "TECH" Then Sheet1.CheckBox3.Value = True
        If ActiveCell.Offset(0, 6).Value = "IN" Then Sheet1.CheckBox4.Value = True
        If ActiveCell.Offset(0, 6).Value = "OUT" Then Sheet1.CheckBox5.Value = True
        If ActiveCell.Offset(0, 6).Value = "ON" Then Sheet1.CheckBox6.Value = True
        If ActiveCell.Offset(0, 6).Value = "OFF" Then Sheet1.CheckBox7.Value = True
        If ActiveCell.Offset(0, 6).Value = "KVW" Then Sheet1.CheckBox8.Value = True

bestaat er een middel om expliciet te vragen dat deze checkboxes idendiek moeten zijn?

Wat wel raar is, als ik de macro in VBA laat uitvoeren, werkt alles perfect.
De macro automatisch starten lukt niet, krijg steeds een verkeerde afdruk.
nadat de macro is uitgevoerd, is wel mijn sheet 1 volledig correct.

Is er misschien een fout in de afdruk procedure?
(Hij past precies de sheet1 aan, na het afdrukken)
Heb de afdruk regels als verplaatst op het einde en in het begin van de loop, maar dit lukt ook niet

Code:
'Wachttijden
    newHour = Hour(Now())
    newMinute = Minute(Now())
    newSecond = Second(Now()) + 5
    waitTime = TimeSerial(newHour, newMinute, newSecond)
    Application.Wait waitTime
'montagerapport afdrukken in Nederlands
    Sheets("Montagerapport").Activate
    ActiveCell.Offset(0, 0).Activate
'afprinten van invulblad nederlands
    Sheets("Nederlands").Activate
    ActiveCell.Offset(0, 0).Activate
    Dim filename As String
    filename = ActiveCell.Offset(0, 0).Value & ".ps"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="PDFFILES", PrintToFile:=True, _
    PrToFileName:=filename
    Sheets("Montagerapport").Select
 
Laatst bewerkt door een moderator:
Wat wel raar is, als ik de macro in VBA laat uitvoeren, werkt alles perfect.
De macro automatisch starten lukt niet, krijg steeds een verkeerde afdruk.
nadat de macro is uitgevoerd, is wel mijn sheet 1 volledig correct.

Waarschijnlijk ligt de oorzaak dan dat je ergens naar een verkeerde sheet verwijst, naar sheet 1 ipv 2 ofzo. Ofwel verwijs je naar verkeerde gegevens door constructies als ActiveCell, ActiveSheet, ... ActiveCell verwijst bv. naar de op dat moment geselecteerde cel. Activesheet naar de op dat moment actieve sheet, ... Je kan deze constructies best vermijden en vervangen door absolute verwijzingen zoals bv. range("a53") ipv ActiveCell.
 
Finch

Ik gebruik de activecell om de do..loop condities te laten werken;
Het aantal lijnen in sheet 4 kan oplopen tot 1500. Afhankelijk van de ingevoerde data.

Alles werkt perfect in VBA, maar niet automatisch.

Er moet een andere redenen zijn, maar zelf heb ik die nog niet gevonden.

Alles wordt tevens afgedrukt in PS files
 
Code:
For j=1 to 8
  Sheet1.OleObjects("CheckBox" & j).Object.Value = IIf(activecell.offset(0,6) = choose(j,"SEIN","INFILL","TECH","IN","OUT","ON","OFF","KVW"),True,false)
Next
Vevangt en verbetert:

Code:
If ActiveCell.Offset(0, 6).Value = "SEIN" Then Sheet1.CheckBox1.Value = True
If ActiveCell.Offset(0, 6).Value = "INFILL" Then Sheet1.CheckBox2.Value = True
If ActiveCell.Offset(0, 6).Value = "TECH" Then Sheet1.CheckBox3.Value = True
If ActiveCell.Offset(0, 6).Value = "IN" Then Sheet1.CheckBox4.Value = True
If ActiveCell.Offset(0, 6).Value = "OUT" Then Sheet1.CheckBox5.Value = True
If ActiveCell.Offset(0, 6).Value = "ON" Then Sheet1.CheckBox6.Value = True
If ActiveCell.Offset(0, 6).Value = "OFF" Then Sheet1.CheckBox7.Value = True
If ActiveCell.Offset(0, 6).Value = "KVW" Then Sheet1.CheckBox8.Value = True

Het grootste verschil bij automatisch VBA laten lopen zit hem in Select en Activate.
Gebruik deze daarom niet. Activecell in VBA is vragen om moeilijkheden.
Geef in VBA gewoon aan om welke cel het gaat bijv. [K3], of [Blad1!K3] of sheets(1).Range("K3") of sheets("Blad1").cells(3,11)
 
Laatst bewerkt:
Volledig programma in VBA

Code:
Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Workbooks("Montagerapport").Activate
    Sheets("Montagerapport").Activate
    Cells(12, 1).Activate
Do While ActiveCell.Value > " "
'reset van de rapporten (NL)
    Sheets("Nederlands").Activate
    For j = 1 To 58
        Sheet1.OLEObjects("checkbox" & j).Object.Value = False
    Next
    Sheet1.Range("C4:E4").ClearContents
    Sheet1.Range("G4").ClearContents
    Sheet1.Range("C5:J5").ClearContents
    Sheet1.Range("C6:F6").ClearContents
    Sheet1.Range("H6:K6").ClearContents
    Sheet1.Range("B12:D13").ClearContents
    Sheet1.Range("E12:G13").ClearContents
    Sheet1.Range("B14:D15").ClearContents
    Sheet1.Range("E14:G15").ClearContents
    Sheet1.Range("E19:N19").ClearContents
    Sheet1.Range("F24:N24").ClearContents
    Sheet1.Range("C52:E52").ClearContents
    Sheet1.Range("C53:E53").ClearContents
    Sheet1.Range("J50:K50").ClearContents
    Sheet1.Range("J51:K51").ClearContents
    Sheet1.Range("L50:M50").ClearContents
    Sheet1.Range("L51:M51").ClearContents
    Sheet1.Range("C61:D61").ClearContents
    Sheet1.Range("C62:D62").ClearContents
    Sheet1.Range("E61:F61").ClearContents
    Sheet1.Range("E62:F62").ClearContents
    Sheet1.Range("J61:K61").ClearContents
    Sheet1.Range("J62:K62").ClearContents
    Sheet1.Range("L61:M61").ClearContents
    Sheet1.Range("L62:M62").ClearContents
    Sheet1.Range("H68:J68").ClearContents
    Sheet1.Range("H69:J69").ClearContents
    Sheets("Montagerapport").Activate
'baken 0 en 1 - Naam opsteller
    Sheets("Nederlands").Range("C4:E4") = ActiveCell.Offset(0, 24).Value
'baken 0 en 1 - Graad opsteller
    Sheets("Nederlands").Range("G4") = ActiveCell.Offset(0, 25).Value
'baken 0 en 1 - Datum Plaatsing
    Sheets("Nederlands").Range("L4:N4") = ActiveCell.Offset(0, 3).Value
'baken 0 en 1 - Lijn
    Sheets("Nederlands").Range("C5:J5") = ActiveCell.Offset(0, 26).Value
'baken 0 en 1 - Sein/KP
    Sheets("Nederlands").Range("M5:N5") = ActiveCell.Offset(0, 21).Value
'baken 0 en 1 - Installatie
    Sheets("Nederlands").Range("C6:F6") = ActiveCell.Offset(0, 27).Value
'baken 0 en 1 - Versie
    Sheets("Nederlands").Range("H6:K6") = ActiveCell.Offset(0, 28).Value
'baken 0 en 1 - Datum controle
    Sheets("Nederlands").Range("M6:N6") = ActiveCell.Offset(0, 29).Value
'baken 0 en 1 : Type bakengroep
    For j = 1 To 8
        Sheet1.OLEObjects("CheckBox" & j).Object.Value = IIf(ActiveCell.Offset(0, 6) = Choose(j, "SEIN", "INFILL", "TECH", "IN", "OUT", "ON", "OFF", "KVW"), True, False)
    Next
'baken 0 - Switch / Fixe
        If ActiveCell.Offset(0, 4).Value = "S" Then Sheet1.CheckBox9.Value = True
        If ActiveCell.Offset(0, 4).Value = "F" Then Sheet1.CheckBox10.Value = True
        If ActiveCell.Offset(0, 4).Value = "S" Then Sheet1.CheckBox13.Value = True
'baken 0 en 1 : BA-bord
        If ActiveCell.Offset(0, 11).Value = "J" Then Sheet1.CheckBox53.Value = True
        If ActiveCell.Offset(0, 11).Value = "N" Then Sheet1.CheckBox54.Value = True
'baken 0 - Identificatie
    Sheets("Nederlands").Range("B12:D13") = ActiveCell.Offset(0, 23).Value
'baken 0 - Serienummer
    Sheets("Nederlands").Range("E12:G13") = ActiveCell.Offset(0, 2).Value
'baken 0 : Met codering of Zonder codering
        If ActiveCell.Offset(0, 5).Value = "M" Then Sheet1.CheckBox11.Value = True
        If ActiveCell.Offset(0, 5).Value = "Z" Then Sheet1.CheckBox12.Value = True
'baken 0 : Vortok - type
        If ActiveCell.Offset(0, 7).Value = "1" Then Sheet1.CheckBox17.Value = True
        If ActiveCell.Offset(0, 7).Value = "1bis" Then Sheet1.CheckBox18.Value = True
        If ActiveCell.Offset(0, 7).Value = "2" Then Sheet1.CheckBox19.Value = True
        If ActiveCell.Offset(0, 7).Value = "3" Then Sheet1.CheckBox20.Value = True
        If ActiveCell.Offset(0, 7).Value = "A" Then Sheet1.CheckBox23.Value = True
        If ActiveCell.Offset(0, 7).Value = "A" Then Sheets("Nederlands").Range("F19:N19") = ActiveCell.Offset(0, 22).Value
'baken 0 : Vortok - met codering of zonder codering
        If ActiveCell.Offset(0, 8).Value = "M" Then Sheet1.CheckBox21.Value = True
        If ActiveCell.Offset(0, 8).Value = "Z" Then Sheet1.CheckBox22.Value = True
'baken 0 : Vortok - dwarsligger
        If ActiveCell.Offset(0, 9).Value = "H" Then Sheet1.CheckBox24.Value = True
        If ActiveCell.Offset(0, 9).Value = "B" Then Sheet1.CheckBox25.Value = True
        If ActiveCell.Offset(0, 9).Value = "M" Then Sheet1.CheckBox26.Value = True
'baken 0 : Vortok - bedding : Vast of Ballast
        If ActiveCell.Offset(0, 10).Value = "V" Then Sheet1.CheckBox37.Value = True
        If ActiveCell.Offset(0, 10).Value = "B" Then Sheet1.CheckBox38.Value = True
'baken 0 : maten
    Sheets("Nederlands").Range("C52:E52") = ActiveCell.Offset(0, 13).Value
    Sheets("Nederlands").Range("J50:K50") = ActiveCell.Offset(0, 14).Value
    Sheets("Nederlands").Range("L50:M50") = ActiveCell.Offset(0, 15).Value
    Sheets("Nederlands").Range("C61:D61") = ActiveCell.Offset(0, 16).Value
    Sheets("Nederlands").Range("E61:F61") = ActiveCell.Offset(0, 17).Value
    Sheets("Nederlands").Range("J61:K61") = ActiveCell.Offset(0, 18).Value
    Sheets("Nederlands").Range("L61:M61") = ActiveCell.Offset(0, 19).Value
    Sheets("Nederlands").Range("H68:J68") = ActiveCell.Offset(0, 20).Value
'Eén cel naar beneden gaan.
    ActiveCell.Offset(1, 0).Activate
'baken 1 - Identificatie
    Sheets("Nederlands").Range("B14:D15") = ActiveCell.Offset(0, 23).Value
'baken 1 - Serienummer
    Sheets("Nederlands").Range("E14:G15") = ActiveCell.Offset(0, 2).Value
'baken 1 : Met codering of Zonder codering
        If ActiveCell.Offset(0, 5).Value = "M" Then Sheet1.CheckBox14.Value = True
        If ActiveCell.Offset(0, 5).Value = "Z" Then Sheet1.CheckBox15.Value = True
'baken 1 - Switch / Fixe
        If ActiveCell.Offset(0, 4).Value = "S" Then Sheet1.CheckBox16.Value = True
'baken 1 : Vortok - type
        If ActiveCell.Offset(0, 7).Value = "1" Then Sheet1.CheckBox55.Value = True
        If ActiveCell.Offset(0, 7).Value = "1bis" Then Sheet1.CheckBox56.Value = True
        If ActiveCell.Offset(0, 7).Value = "2" Then Sheet1.CheckBox57.Value = True
        If ActiveCell.Offset(0, 7).Value = "3" Then Sheet1.CheckBox58.Value = True
        If ActiveCell.Offset(0, 7).Value = "A" Then Sheet1.CheckBox33.Value = True
        If ActiveCell.Offset(0, 7).Value = "A" Then Sheets("Nederlands").Range("F24:N24") = ActiveCell.Offset(0, 22).Value
'baken 1 : Vortok - met codering of zonder codering
        If ActiveCell.Offset(0, 8).Value = "M" Then Sheet1.CheckBox31.Value = True
        If ActiveCell.Offset(0, 8).Value = "Z" Then Sheet1.CheckBox32.Value = True
'baken 1 : Vortok - dwarsligger
        If ActiveCell.Offset(0, 9).Value = "H" Then Sheet1.CheckBox34.Value = True
        If ActiveCell.Offset(0, 9).Value = "B" Then Sheet1.CheckBox35.Value = True
        If ActiveCell.Offset(0, 9).Value = "M" Then Sheet1.CheckBox36.Value = True
'baken 1 : Vortok - bedding : Vast of Ballast
        If ActiveCell.Offset(0, 10).Value = "V" Then Sheet1.CheckBox39.Value = True
        If ActiveCell.Offset(0, 10).Value = "B" Then Sheet1.CheckBox40.Value = True
'baken 1 : maten
    Sheets("Nederlands").Range("C53:E53") = ActiveCell.Offset(0, 13).Value
    Sheets("Nederlands").Range("J51:K51") = ActiveCell.Offset(0, 14).Value
    Sheets("Nederlands").Range("L51:M51") = ActiveCell.Offset(0, 15).Value
    Sheets("Nederlands").Range("C62:D62") = ActiveCell.Offset(0, 16).Value
    Sheets("Nederlands").Range("E62:F62") = ActiveCell.Offset(0, 17).Value
    Sheets("Nederlands").Range("J62:K62") = ActiveCell.Offset(0, 18).Value
    Sheets("Nederlands").Range("L62:M62") = ActiveCell.Offset(0, 19).Value
    Sheets("Nederlands").Range("H69:J69") = ActiveCell.Offset(0, 20).Value
'montagerapport afdrukken in Nederlands
    Sheets("Montagerapport").Activate
    ActiveCell.Offset(0, 0).Activate
'afprinten van invulblad nederlands
    Sheets("Nederlands").Activate
    ActiveCell.Offset(0, 0).Activate
    Dim filename As String
    filename = ActiveCell.Offset(0, 0).Value & ".ps"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="PDFFILES", PrintToFile:=True, _
    PrToFileName:=filename
'Wachttijden
    newHour = Hour(Now())
    newMinute = Minute(Now())
    newSecond = Second(Now()) + 5
    waitTime = TimeSerial(newHour, newMinute, newSecond)
    Application.Wait waitTime
'Eén cel naar beneden gaan.
    Sheets("Montagerapport").Activate
    ActiveCell.Offset(1, 0).Activate
Loop
End Sub
 
Laatst bewerkt door een moderator:
Is
Code:
Sheet1.Range("C4:E4,J50:M51").ClearContents
niet hetzelfde als
Code:
Sheet1.Range("C4:E4").ClearContents
Sheet1.Range("J50:K50").ClearContents
Sheet1.Range("J51:K51").ClearContents
Sheet1.Range("L50:M50").ClearContents
Sheet1.Range("L51:M51").ClearContents
Met deze en vorige suggesties kun je je code aardig vereenvoudigen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan