Wie kann ich Variablen verwenden, um Eigenschaften in VBA (Excel)
Nehmen Sie diesen code:
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, x, y, w, h).TextFrame
.Parent.Line.Visible = False
.Parent.Fill.ForeColor.RGB = RGB(r, g, b)
End With
Gibt es eine VBA-Möglichkeit, um "execute" oder "bewerten" wie kann man in perl/python/..., so dass der text .Parent.Line.Visible
gezogen werden können aus einer Variablen (oder den Wert der Zelle), eher als hart codiert?
ParentLine = ".Parent.Line.Visible"
ParentLineValue = "False"
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, x, y, w, h).TextFrame
**eval**(ParentLine & "=" & ParentLineValue)
.Parent.Fill.ForeColor.RGB = RGB(r, g, b)
End With
EDIT: ich fand MSDN-Informationen für den Zugang erwähnt Eval, aber wenn, führe ich meinen code, er sagt "nicht definierte Sub oder Function", dem Hinweis auf Eval (Excel scheint nicht zu wissen, diese Funktion).
EDIT 2: Gefunden die endgültige (negative) Antwort auf SO.
EDIT 3: Scheint, wie es ist, eine Antwort nach, denn ich bin nicht nach einer Allgemeinen Lösung für die Ausführung von beliebigem code. Dank GSerg für die Hilfe mit der Verwendung von CallByName.
- Ich bin gespannt, Wann würde jemals wollen, dies zu tun?
- Ich möchte einfach zu parametrieren, ein makro und nicht dazu zwingen, Benutzer zu Lesen, VBA, spielen Sie einfach mit Ihrer Tabellenkalkulation. Ich bin mir bewusst, die Auswirkungen auf die Sicherheit, aber das ist für limited-use nur. Vielleicht möchten Sie unterschiedliche Eigenschaften, alternativ auf, dass man.
ScriptControl
ActiveX kann Ihnen helfen, zu bewerten, string mit jederApplication
's Mitglied, check die Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung 1.
Verwenden
CallByName
.Verwendung:
Lösung 2.
Dynamisch code hinzuzufügen.
Tun Sie das nicht. Es ist falsch, und es erfordert, dass "Zugriff auf VB-Projekt" Häckchen setzen.
Fügen Sie einen Verweis auf
Microsoft Visual Basic for Applications Extensibility X.X
.Erstellen Sie ein Modul namens
ModuleForCrap
.Hinzufügen eines dynamisch konstruiert sub/Funktion:
Nennen es:
Löschen:
SetProperty "interior.color", vbYellow, Data.Cells(1, 5)
, aber für einige Grund es nicht wieSetProperty "Data.Cells(1,5).interior.color", vbYellow
- aber das tut mir gut.Du könntest versuchen Sie bei
CallByName
, aber ich glaube nicht, dass es geht, um zu tun, was Sie wollen (zumindest nicht leicht, wenn Sie gehen zu wollen, zu bewerten, multi-dot-Objekt/Objekt-Referenzen).ActiveSheet.Cells(x, y)
nicht unterstützenCallByName
.False ausgewertet zu Null. Können Sie konstruieren eine integer-variable gleich null, es entpuppen die gleiche Weise als Falsch.