Jag har en string som motsvarar namn och properties på en kontrol i ett formulär tex Följande kod funkar så länge objects djupet är tre steg.. Tack SNÄLLA Patrik.. Det hade smugit sig in ett par små fel i koden ovan men annars funkade det bracallbyname
"frmMainMenu.Command1.text"
Detta vill jag utföra:
frmMainMenu.command1.text=VariabeltVärde
Någon som har nåt tips?? Callbyname kräver ett objektnamn ..
NettanSv: callbyname
<code>
Public Sub SetProperty(sCmd as string, sValue as string)
Dim ctrl As Control
Dim form As form
Dim sCtrl As String
Dim sForm As String
Dim sCmd As String
Dim sProperty As String
Dim lDot2 As Long
Dim lDot As Long
lDot = InStr(1, sCmd, ".")
lDot2 = InStr(lDot + 1, sCmd, ".")
sForm = LCase(Left$(sCmd, lDot - 1))
sCtrl = LCase(Mid$(sCmd, lDot + 1, Len(sCmd) - (lDot2 - 1)))
sProperty = LCase(Mid$(sCmd, lDot2 + 1))
For Each form In Forms
If LCase(form.Name) = sForm Then
For Each ctrl In form.Controls
If LCase(ctrl.Name) = sCtrl Then
CallByName ctrl, sProperty, VbLet, sValue
Exit For
End If
Next
Exit For
End If
Next
End Sub
</code>Sv: callbyname
Jag satt precis och plitade på en nästan likadan lösning men hade fastnat eftersom jag rationalisterat bort anropet till callbyname
Bockar o Bugar
NetanSv: callbyname
Dim ctrl As Control
Dim Form As Form
Dim sCtrl As String
Dim sForm As String
( ' Dim sCmd As String)
Dim sProperty As String
Dim lDot2 As Long
Dim lDot As Long
lDot = InStr(1, sCmd, ".")
lDot2 = InStr(lDot + 1, sCmd, ".")
sForm = LCase(Left$(sCmd, lDot - 1))
sCtrl = LCase(Mid$(sCmd, lDot + 1, (lDot2 - lDot - 1))) ///HÄR
HAR JAG ÄNDRAT**************
sProperty = LCase(Mid$(sCmd, lDot2 + 1))
For Each Form In Forms
If LCase(Form.name) = sForm Then
For Each ctrl In Form.Controls
If LCase(ctrl.name) = sCtrl Then
CallByName ctrl, sProperty, VbLet, sValue
Exit For
End If
Next
Exit For
End If
Next