• 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.

Met opties een code genereren.

Status
Niet open voor verdere reacties.
Heb je de nieuwe bijlage in mijn vorige post bekeken? Anders volg ik je niet helemaal?
 
Kan dat niet simpeler ?

Code:
Sub M_snb_000()
    Cells(1).Resize(36 ^ 2) = [index(char(48+int((row(1:1296)-1)/36)+if(int((row(1:1296)-1)/36)>9,7,0))&char(48+mod(row(1:1296)-1,36)+if(mod(row(1:1296)-1,36)>9,7,0)),)]
End Sub
 
Heb je de nieuwe bijlage in mijn vorige post bekeken? Anders volg ik je niet helemaal?

Ja ik heb hem bekeken en ik snap hem nu. Alleen dat code genereren was eigenlijk wel goed. Zo zie je meteen welke code erbij hoort.
Dus dat wilde ik graag zo houden alleen eenvoudig de opties kunnen aanpassen, zodat ik per type deze kan invoeren.

Zou je dit nog zo kunnen aanpassen?
 
Daar hoeft verder niets voor aangepast te worden. Je bent vrij om de userform op te roepen hoe en wanneer je wilt.

Ik heb je nu laten zien hoe je twee kanten op werkt (CODE en DECODE) maar heb het origineel expres zo gelaten. De userform uit de laatste versie werkt exact hetzelfde verder als de eerste versie als je niet zelf de decode waarde invult.

Dit is de code die nu de userform aanroept:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [d:d]) Is Nothing Then
        Set fshow = New UserForm1
        fshow.Label2.Caption = Target.Value '<<dit weglaten voor geen decode
        fshow.Show
        On Error Resume Next
        Target.Value = fshow.Label2.Caption
        Unload fshow
        Cancel = True
    End If
    'Cancel = True
End Sub

Als je de 4de regel weglaat, dan werkt de code zoals in het eerste voorbeeld.

dit stukje:
Code:
        On Error Resume Next
        Target.Value = fshow.Label2.Caption

schrijft de gekozen code weg. Je kunt target.value vervangen door een willekeurige plaats op je sheet.

*edit*

Mogelijk begrijp ik je bedoeling verkeerd: De namen en zelfs de hoeveelheid van de selectievakjes kun je eventueel aanpassen in de code. Deze kun je zelfs variabel maken. Alleen hoe weet je waar je welke opties wil hebben?
 
Laatst bewerkt:
Ik snapte je laatste post niet helemaal maar het is wel gelukt. Heb gewoon een toets toegevoegd, hierachter een generator die niet verdwijnt.

Maar als ik een optie met lange naam toevoeg als in bijgevoegd document past hij niet helemaal.Hoe krijg ik dit netjes?

Bekijk bijlage Generatorgoed.xlsm
 
De afstand, plaatsing, etc staat allemaal hier. Dikgedrukt in de code beneden is de plaatsing van de tweede kolom

Code:
Private Sub UserForm_Initialize()[size=1]
    Set opslag = New Collection
    For i = 1 To 26
        Set toggle = Me.Controls.Add("Forms.CheckBox.1")
        toggle.Top = (((i - 1) Mod 13) * 20) + 60
        If i > 13 Then[/size]
           [b]toggle.Left = 80[/b]
         [size=1]End If
        toggle.Caption = Sheets("Blad1").Cells(i, 13)
        opslag.Add toggle, "k" & i
    Next i[/size]
End Sub
 
Zover was ik idd, maar maximaal aantal tekens achter het chekboxje is beperkt en dat wil ik aanpassen zodat de hele benaming zichtbaar is. Hoe doe je dat?
 
Ah, Je kunt de "width" aanpassen op dezelfde manier.
Code:
toggle.width = xxxx
 
Thanks dat bedoelde ik. Waar kan ik al deze mogelijkheden nou terugvinden. neem aan dat jullie het uit het hoofd doen maar dat werkt bij mij iig nog niet zo.
staat er ergens veel codes omschreven of is het gewoon zoeken?
 
De helpfile heeft alle opties. Maar in het geval van de checkbox kun je die ook in de propertie explorer zien als je een checkbox selecteert.
 
Thanks, het is iig al stukker duidelijker.

Ik heb alleen nog mijn vraagtekens bij de betrouwbaarheid. Wil dit gaan gebruiken voor een bedrijf. Maar ik heb het zelf niet opgebouwd en mocht het een keer crashen wil ik het wel weer kunnen maken. Ook bij een eventuele nieuwe versie van Visual basic. Iemand ervaring of tips?

Verder heb ik nog een vraag, als ik de opties uitbreidt dan loopt het bij het selecteren van optie 32 vast op: Overloop. foutopsporing geeft aan: lettercode = total Mod (UBound(numberlist) + 1)

ik heb al wat dingen geprobeerd maar krijg het niet zo dat ik meer opties erin krijg.
 
In dat geval moet je de DIM van "lettercode" aanpassen naar "double" het is nu gedimensioneerd als LONG, waar 32 bits inpassen. Is dus een beperking van het datatype. daar je aangaf nooit meer dan 26 opties te willen heb ik daar verder niet omheen gebouwd.

In principe werkt de logica van mijn code in elke versie van excel en durf zelfs te zeggen in iedere programmeertaal. Je moet je bedenken dat VBA een gestripte versie is van VB6, dat origineel gemaakt is voor windows 98. De moedertaal is dus al bijna 20 jaar oud. Mocht microsoft besluiten VBA te vervangen door VB.NET of iets dergelijks is het programma nog steeds nagenoeg gelijk om te schrijven.
 
Instelling nu:

Dim letterlist As New Collection
Dim numberlist As Variant
Dim lettercode As Double
Dim total As Double

Moet ik dan Dim total aanpassen? Want er is nog niks veranderd, 32 optie werk nog steeds niet.
 
Mocht ik vanavond nog ergens tijd vinden kan ik nog even kijken. Heb je een idee van hoeveel opties je wil gebruiken?
 
Ik denk niet dat ik er meer dan 31 opties nodig heb. Maar ik ga het nu helemaal uitschrijven voor alle producten. Daarom wil ik graag weten hoe het moet voor als we het in de toekomst eventueel moeten aanpassen, mocht het nodig zijn.

Het is eigenlijk ook belangrijk dat ik ten allen tijde de opties en codes kan linken op dezelfde manier, mocht het crashen of de software veranderen.
 
Ik heb voor vanavond geen excel, maar het lijkt erop dat het een beperking is van de MOD operator zelf. Uit de handleiding:

het gegevenstype ... een Variant met een Long-waarde

Ik vermoed dus dat het MOD commando intern een beperking heeft tot LONG, ongeacht wat de invoer is.

*EDIT*
Een eigen mod functie lost dat op (even snel getest bij een collega)

Code:
Private Function mymod(invoer As Double, deler As Double) As Double
    afrond = Int(invoer / deler)
    mymod = invoer - (afrond * deler)
End Function
 
Laatst bewerkt:
@wampier

Code:
Private Function mymod(invoer As Double, deler As Double) As Double
     mymod = invoer - (invoer \ deler)
End Function
 
@SNB dat lost niets op, want de "\" operator is ook een LONG. Je krijgt dus dezelfde overrun. de INT (en FIX) operators kunnen wel werken met grote getallen. Technisch gezien kunnen die overigens ook op een enkele lijn, maar ik houd er persoonlijk meer van om delen uit te schrijven
 
@ Wampier

Code:
    Dim letterlist As New Collection
    Dim numberlist As Variant
    Dim lettercode As Long
    Dim total As Double
    
    numberlist = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
    
    For i = 1 To opslag.Count
        If opslag("k" & i).Value = True Then
            total = total + 2 ^ (i - 1)
        End If
    Next i
    While total > 0
        lettercode = total Mod 36
        total = total - lettercode
        total = total / 36
        letterlist.Add lettercode
    Wend
    
    Label2.Caption = ""
    For Each deel In letterlist
        Label2.Caption = Label2.Caption & numberlist(deel)
    Next deel



Wat is de logica achter de code?
Dan doel ik vooral op dit denk ik :
For i = 1 To opslag.Count
If opslag("k" & i).Value = True Then
total = total + 2 ^ (i - 1)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan