[vb+excel] Loop voor checkboxen

Pagina: 1
Acties:

  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
Ik heb het volgende:
Ik heb een excel-sheet met maar 1 blad. Daarop staan verschillende checkboxen. Zodra ik een optie kiez (zeg 1, 2 of 3), worden verschillende rows (incl de checkbox erop) op hidden gezet. Kies ik weet een andere optie, komen ze weer terug. Op zich werkt dit goed, maar soms vallen die checkboxen verkeerd (verplaatsen dus horizontaal).

Nu wil ik in VB een stukje code maken, die elke keer die boxen initialiseerd naar een goede plaats (x en y dus), alleen nu is de vraag kan dit met een loop, zodat ik niet voor elke box appart een regel code op moet geven....

Ik ben het volgende tegen gekomen, die "iets" met Controls doet:

code:
1
2
3
4
5
Dim ctrl As Control

For Each ctrl In Me.Controls
  If TypeName(ctrl) = "CheckBox" Then
  .  etc...


Maar zodra ik dit probeer, krijg ik de fout op regel 3 dus in dit geval.... het lijkt wel of mijn VB niet overweg kan met "Controls". Kan ik dit oplossen?? Of is er een andere weg mogelijk.

Ik werk onder Excel 2002 SP2.

euh...ja


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:56
* onkl zat uit zijn nek te lullen

Edit:
Je checkbox zit niet in Worksheet.Controls (die collectie bestaat niet.) Maar in Worksheet.Shapes.
Bekijk de volgende code eens:

code:
1
2
3
4
5
6
7
8
9
Dim ctrl As Shape

For Each ctrl In Me.Shapes
 If ctrl.Type = 8 'het is een shape van het Form type, geen lijn of zo
  If ctrl.FormControlType=1 'het is een checkbox
  .  etc...-> hier zal je ook wel mee moeten stoeien vrees ik.
  End if
 End if
Next ctrl

[ Voor 68% gewijzigd door onkl op 12-11-2004 11:56 ]


  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
hij geeft aan dat hij het gegevenslid niet kan vinden... ook als ik elk andere opgeef (bijv. Blad1, Me, Ecxel, oid.)

Ik ben geen specialist in VB... maar volgensmij kan ik die classe gewoonweg niet aanroepen, kan dat??

euh...ja


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:56
Sorry, foutje. Ben soms een beetje te optimistisch over Excel. Zie versch en improved poging hierboven. 8)7
BTW, je bent je code toch wel aan het typen in een Worksheetcodeblad, niet in een module hoop ik (just checking)

[ Voor 35% gewijzigd door onkl op 12-11-2004 11:58 ]


  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
ok dit werk inderdaad.... thnx hiervoor ;), maar is het ook mogelijk om in het Worksheetcodeblad (zoals jij dat noemt) dit stukje code in een funvtie te zetten, en die vervolgens in bijv. Blad1 aan te roepen onder Sub Radio_new_Click()??

euh...ja


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:56
Ja dat kan.
Maar: je kan twee verschillende radiobuttons (of optionbuttons zoals die dingen eigenlijk heten in VBtaal op je werkblad zetten.
In de werkbald Forms zit er een verstopt. Die is niet direct aan te roepen (je kan wel een macro aan een button uit die collectie hagen overigens.) Ik neem aan dat je die tot nu toe gebruikt.
Dan heb je de "Visual Basic" option button. Zoek de knoppenbalk "Control Toolbox", daarin zit deze optionbutton.
Plak er eens een van in een werkblad, laat de naam lekker op optionbutton1 staan, druk op het groene driehoekje in de control toolbox (Exit design mode), ga naar je VB editor, dubbelklik op de naam van het werkblad waarin je net gewerkt hebt en plak deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub OptionButton1_Click()
On Error Resume Next
Dim vorm As Shape
Dim str As String
str = "Shapes " & Me.Shapes.Count & vbCrLf
For Each vorm In Me.Shapes
str = str & vorm.Name & ", " & vorm.Type & ", "
str = str & vorm.FormControlType
str = str & vbCrLf
Next vorm
str = str & "OLE Objects " & Me.OLEObjects.Count & vbCrLf
Dim ole As OLEObject
For Each ole In Me.OLEObjects
str = str & ole.Name & ", " & ole.OLEType & ", " & ole.progID & vbCrLf
Next ole
MsgBox str
End Sub

hiermee zie je welke onderscheidende vlaggen de verschillende types knoppen, menus, combo's etc hebben.
Alle controls van het "Vislual Basic" type kunnen code onder zich hebben om te reageren op bepaalde events, klik bijvoorbeeld.
Ga hiervoor weer naar design mode en dan rechtermuis op object, View code.

  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
zeg onkl, bedankt voor deze tip, ik ga het morgen even proberen op het werk, als ik der tijd voor heb heet dat ;)

euh...ja

Pagina: 1