Hålla alla kunniga på VBA! Är det kryssrutor infogade med verktygsfältet "Formulär" eller verktygsfältet "Kontroller". Tack Åsa! Om du har infogat dem med verktygsfältet "Kontroller" så är de instanser av OLEObjects, ja. Annars av CheckBoxes, OptionButtons osv. Ahhh.....du är ju för go Åsa! Koden i min tunga applikation kommer att minska radikalt! Tack, tack!Objektfält i VBA?
Någon som vet hur/om man kan deklarera och använda objektfält i VBA? Exempelvis om jag har ett stort antal kryssrutor på en Excel-flik som jag vill kunna anropa med index istället för som nu chkCheckBox1....chkCheckBox50 osv.
Har inte hittat någon syntax för detta.
Någon duktig som har det?
Hälsningar
/JCB Sv: Objektfält i VBA?
Kryssrutor infogade med "Formulär" ingår i klassen "Checkboxes" och kan lätt identifieras med index. Kryssrutor infogade med "Kontroller" ingår i klassen "OLEObjects" och ligger alltså blandade med alla andra eventuella objekt på excelbladet.Sv: Objektfält i VBA?
Om jag fattat det rätt (vilket i o f s inte är säkert) så utgör exv alla garfiska element (kryssrutor, kombo-boxar etc.) instanser av klassen OLEObjects. Korrekt? Då är väl exv följande dim-syntax korrekt till att börja med?
Dim chkb(5) As OLEObjects
Om den är korrekt, hur skrivs då exv tilldelningen:
Set chkb(1) = ....
Får bara FEL där!! Inkompatibla typer och Gud vet vad. Kan du hjälpa mig ytterligare please?Sv: Objektfält i VBA?
Den här koden förutsätter att kryssrutorna redan finns på arbetsbladet.
<code>
Option Explicit
Private moBox() As OLEObject
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim nIdx As Integer
For nIdx = 0 To UBound(moBox)
Set moBox(nIdx) = Nothing
Next nIdx
End Sub
Private Sub Workbook_Open()
Dim oObj As OLEObject
Dim nIdx As Integer
For Each oObj In Sheets("Blad1").OLEObjects
If TypeName(oObj.Object) = "CheckBox" Then
ReDim Preserve moBox(nIdx)
Set moBox(nIdx) = oObj
nIdx = nIdx + 1
End If
Next oObj
End Sub
Public Sub Test
MsgBox moBox(1).Object.Caption
End Sub
</code>Sv: Objektfält i VBA?