Toon posts:

[vba] access variabele knop

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heb het volgende probleem.
Op een formulier staan 64 knoppen, die al dan niet zichtbaar moeten worden gemaakt en moeten worden voorzien van een Caption.

De tekst moet uit 2 verschillende array's worden gehaald. Allebei de array's bevatten 8 waarden.

code:
1
2
dim k$(8)
dim c$(8)


De knoppen hebben de namen
code:
1
2
3
4
5
k1c1, k1c2 ------- k1c8
k2c1, k2c2-------- k2c8
 |
 |
k8c1, k8c2------- k8c8


Nu dacht ik, om niet 64 keer voor elke knop de code te schrijven, een for-loop te maken, maar dat wil nog niet echt lukken.

Dit is de bedoeling:
code:
1
2
3
4
5
6
7
For i = 1 To 8 Step 1
  For x = 1 To 8 Step 1
    test = k$(i)
    kicx.Caption = (test)
    kicx.Visible = True
    Next
  Next


Alleen het probleem is dus om de waarde van de i en de x in de naam van de knop te krijgen. Heb al gezocht, maar is me niet echt duidelijk geworden. Heb het al op verschillende manieren geprobeerd, maar het mocht niet baten. Bijvoorbeeld:

K & format(i) & c & format(x)

Misschien kan iemand van jullie me helpen.

Het gaat dus puur om de namen van de knoppen k1c1 t/m k8c8.

[ Voor 5% gewijzigd door Verwijderd op 30-12-2005 20:28 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wat is je doel? Ik krijg bij dit soort dingen al gauw het idee dat de programmeur al eerder van het Juiste Pad is geraakt dan hij zelf denkt. But I might be wrong.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
Het doel is dat iemand inlogt, en daarna een aantal knoppen voor zich krijgt die naar bepaalde formulieren verwijzen.

Het gaat om klassen (maximaal 8 dus) waarbij gegevens ingevoerd moeten worden (ook maximaal 8 ).

Als iemand inlogt worden alleen zijn klassen zichtbaar, en de gegevens die hij in mag vullen, ik kan dit wel voor elkaar krijgen, maar dan moet ik 64x een stukje code vschrijven. De code zelf heb ik al, alleen moet dus de naam van de knop telkens veranderen met een for-loop. Is een stuk minder werk, en een stuk overzichtelijker.
De formulieren zijn er ook al, en die werken ook.

Ik hoop dat het zo deen beetje duidelijk is.

[ Voor 10% gewijzigd door Verwijderd op 30-12-2005 20:49 ]


  • engelbertus
  • Registratie: April 2005
  • Laatst online: 08-04 10:58
1 keer een stukje code schrijven, en 64 keer kopieren is misschien makkelijker?? :p

maar wat gaat er fout?
wat komt er dan nu op de knoppen te staan?
heb je al even getest of het probleem niet licht aan de for -next lussen, ipv de manier waarop je de tekst er op wilt zetten?
dus effe een etst scriptje die een kicx waarde op de knop zet?

[ Voor 64% gewijzigd door engelbertus op 30-12-2005 20:58 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Klassen, als in schoolklassen? Waarom dan niet een doorlopend formulier, met als recordsource een selectie van de klassen die de gebruiker mag zien, dan hoef je maar een knop te zetten in het detailgedeelte, met als code iets van:
code:
1
DoCmd.OpenForm "KlasDetail", WhereCondition:="id = " & Me.id


Je kan namelijk wel raden wat er gaat gebeuren zodra je klaar bent met jouw oplossing ... "ohnee, het worden er toch 9 ... en er moeten ook 9 dingen ingevuld worden" ... en dan mag je nog 27 knopjes gaan maken ...

edit: engelbertus, code kopieren (en al helemaal 64 keer) is natuurlijk helemaal te ranzig voor woorden :X

[ Voor 14% gewijzigd door kenneth op 30-12-2005 20:58 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
Volgens mij gaat dit niet werken, omdat de gebruiker per klas verschillende dingen kan invullen, Dus niet bij elke klas hetzelfde.

De oplossing van 8 is wel genoeg, alleen krijg dus die variabele niet in aam van die knop.
Is dit uberhaupt mogelijk in vba.

  • engelbertus
  • Registratie: April 2005
  • Laatst online: 08-04 10:58
als het dan toch om een school gaat( basisschool?) met 8 (cijfers) per klas (per periode?)
dan kun je ook alle knoppen er op zetten en een script maken die bij een klik op deknop adhv de ingelogde persoon toestemming geeft om de informatie te bekijken, of in te vullen.
je moet dan nog wel een formulier maken met de knoppen, maar je hoeft niet meer iets te testen bij het maken van de knoppen, maar slechts bij een druk op de knop. dat lijkt me toch handiger dan 64 keer iets testen.

Verwijderd

Topicstarter
De klassen en de dingen die de gebruiker met die klas mag doen zitten al in een array, dus echt iets testen hoeft er niet gebeurd te worden denk ik, een stukje code van 4 regeltjes. Als je toch alle knoppen moet maken, maakt dat toch niet zo veek meer uit. Die tijd dat het "testen" (zoals jij het noemt) kost is te verwaarlozen.

  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Verwijderd schreef op vrijdag 30 december 2005 @ 20:27:
Dit is de bedoeling:
code:
1
2
3
4
5
6
7
For i = 1 To 8 Step 1
  For x = 1 To 8 Step 1
    test = k$(i)
    kicx.Caption = (test)
    kicx.Visible = True
  Next
Next
Dat kun je zo doen:
Visual Basic:
1
2
3
4
5
6
7
For i = 1 To 8 Step 1
  For x = 1 To 8 Step 1
    test = k$(i)
    Me("k" & i & "c" & x).Caption = (test)
    Me("k" & i & "c" & x).Visible = True
    Next
  Next
Pagina: 1