Jag vill kunna få fram en controls caption men hur får man fram det på en indexerad control? Jag vet inte riktigt vad du försöker göra men om du loopar igenom alla kontrollerna i ett formlär kan du göra så här oavsett om kontrollerna ingår i en Control Array eller inte: Det var ett djä... lurigt problem. Har roat mig att försöka fixa det. Efter lite kliande i hårbotten så kommer jag med ett princip förslag. Kan svaret du söker vara: Förstod att det fanns en enkel lösning. Goooood Andreas Tusen tack, ni är grymma! Andreas mfl. Det är inte så märkligt. Tänk på nästlade arrayer:Jag vill kunna få fram en controls caption som är indexerad?
If TypeName(Me.Controls(Control.Name)) = "Object" Then
sControlname = Control.Name & "(" & Control.Index & ")"
iIndex = Control.Index
Debug.Print Control.Name(Control.Index).Caption
Debug.Print Control.Name(iIndex).Caption
Else
sControlname = Control.Name
End IfSv: Jag vill kunna få fram en controls caption som är indexerad?
Dim ctr As Control
For Each ctr In Me.Controls
Select Case TypeName(ctr)
Case "CheckBox", "Frame", "Label", "OptionButton"
Debug.Print ctr.Caption
Case Else
Debug.Print ctr.Name
End Select
Next ctr
Sv:Jag vill kunna få fram en controls caption som är indexerad?
Tänkte exakt som du Åsa, men ! det funkar tyvärr inte.
Jag har testat med Command1 som har ett antal index.
Jag Skall Lösa Det #¤%&!? ;-)Sv: Jag vill kunna få fram en controls caption som är indexerad?
<code>
Option Explicit
Private Sub Command1_Click(Index As Integer)
'Exempel där jag har Command1 array
'Ropa på ControlCaption från någon kodrad
Call ControlCaption(Me)
End Sub
'Om du bara vill ha just den du klickar på eller den som är aktiv
'så skippa For-satsen och kör bara ett race
Private Sub ControlCaption(Frm As Form)
Dim i As Long, ctr As Control
For i = 0 To Frm.Controls.Count - 1
Set ctr = Frm.Controls(i)
On Error Resume Next
MsgBox ctr.Caption
Debug.Print ctr.Caption
' Ganska osnyggt men det funkar ju
If Err = 438 Then ' Property för ctr.Caption saknas
MsgBox ctr.Name
Debug.Print ctr.Name
End If
Next i
Set ctr = Nothing
End Sub
</code>Sv: Jag vill kunna få fram en controls caption som är indexerad?
Label1(0).Caption
Om du vill skriva ut kontrollernas namn:
Dim ctrl As Control
Dim X As Object
For Each ctrl In Me.Controls
Set X = Me.Controls(ctrl.Name)
If X Is ctrl Then
Debug.Print ctrl.Name
Else
Debug.Print ctrl.Name & "(" & ctrl.Index & ")"
End If
Next
Om du vill hämta caption från en kontroll i arrayen:
Private Sub Command2_Click()
MsgBox GetCaption("Label1", 0) ' Label1(0)
End Sub
Function GetCaption(ControlName As String, ControlIndex As Long) As String
GetCaption = Me.Controls(ControlName)(ControlIndex).Caption
End Function
Sv:Jag vill kunna få fram en controls caption som är indexerad?
Sv: Jag vill kunna få fram en controls caption som är indexerad?
Jag var lite otydlig men ni hjälpte mig lösa frågan.Sv:Jag vill kunna få fram en controls caption som är indexerad?
Märkligt att man kan skriva så här dvs 2 parantesdelar utan komma.
Kommentera gärna och och ev referens.
<b>GetCaption = Me.Controls(ControlName)(ControlIndex).Caption</b>Sv: Jag vill kunna få fram en controls caption som är indexerad?
Dim X
X = Array(Array(Array(Array(Array(Array(Array("Wow!")))))))
MsgBox X(0)(0)(0)(0)(0)(0)(0)
Objekt/klasser kan ha default egenskaper.
T.ex. recordset:
Z = rs("Name")
Motsvarar:
Z = rs.Fields.Item("Name").Value
Fields är default egenskapen för Recordset.
Item(Index) är default egenskapen för Fields sammlingen.
Value är deafult egenskapen för fält objektet.
Så:
GetCaption = Me.Controls(ControlName)(ControlIndex).Caption
Motsvarar igentligen:
GetCaption = Me.Controls.Item(ControlName).Item(ControlIndex).Caption