8
votes

Comment utiliser des variables pour définir des propriétés dans VBA (Excel)

Prenez ce code:

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


3 commentaires

Je suis curieux de savoir quand on voudrait jamais faire cela?


Je veux simplement paramétrer une macro et ne pas forcer les utilisateurs à lire VBA, il suffit de jouer avec leur tableur. Je suis conscient des implications de sécurité, mais c'est uniquement pour une utilisation limitée. Pourrait vouloir définir différentes propriétés, alternativement à celui-là.


ScriptControl ActiveX peut vous aider à évaluer la chaîne contenant n'importe quel membre de l'application , check Cette réponse .


3 Réponses :


0
votes

Faux évalue à zéro. Vous pouvez construire une variable entière pour assimiler à zéro et le faire éteindre de la même manière que false.


1 commentaires

Bien mais mon problème est beaucoup plus basique que cela. J'ai édité ma question pour affiner ma demande. Je me rends compte que c'est plus une question de soutien, mais je ne trouve que les informations pertinentes nulle part.



1
votes

Vous pouvez essayer d'envisager callbyname , mais je ne pense pas que cela va faire ce que vous voulez (au moins, pas facilement si vous voulez évaluer l'objet multi-dot / Références de propriété).


2 commentaires

Excellent essai, mais activeheet.cells (x, y) ne prend pas en charge callbyname .


Maintenant, je l'obtiens, CallbyName est un niveau seulement. La solution de GSerg est requise pour plusieurs niveaux.



10
votes

Solution 1.

Utilisez callbyname code>. p> xxx pré>

USAGE: p>

With ThisWorkbook.VBProject.VBComponents("ModuleForCrap").CodeModule
  .DeleteLines .ProcStartLine("foobar", vbext_pk_Proc), .ProcCountLines("foobar", vbext_pk_Proc)
End With


2 commentaires

super. Ça fonctionne avec SetProperty "Intérieur.color", Vbyellow, Data.Cells (1, 5) , bien que cela n'aime pas "code> setProperty" data.cells (1,5). Intérieur.Color ", Vbyellow - Mais ça me fait bien.


@Asoundmove: Oui, seuls les points sont supportés à l'intérieur de la chaîne de chemin. Si vous devez prendre en charge des paramètres intégrés, vous finiriez par écrire un analyseur complet, à quel point il serait plus facile d'utiliser la deuxième approche.