2013-01-07 8 views
6

In Excel, ho un modulo VBA chiamato MyModule che ha una funzione come taleparametri della funzione del modulo VBA Parsing tramite riflessione

Public Function MyFunction(Param1 As Range, Param2 As Range) As String 
      ' some implementation 
    End Function 

In fase di esecuzione, so che ho un modulo chiamato MyModule e so di avere una funzione denominata Param1 e Nel mio mondo (C#), questo è chiamato riflessione. Posso usare concetti simili qui per ottenere il nome del parametro o mi aspetto troppo da VBA?

+1

'yourWorkbook.VBProject.VBComponents (" MyModule "). CodeModule' dovrebbe darti accesso a ciò di cui hai bisogno. – assylias

+0

@assylias mi sta dando l'intero codice sorgente, che non è eccezionale, ma potrebbe aiutare a risolvere il mio problema. Ne sei a conoscenza di uno che può darmi la funzione come oggetto (simile a C# o JavaScript)? – Adam

+0

L'ho postato solo come commento perché manca di dettagli, ma pensarlo ti aiuterà a iniziare. Sono sicuro che qualcuno pubblicherà una risposta migliore più tardi. – assylias

risposta

6

C'è una buona analisi a questo CodeProject http://www.codeproject.com/Articles/164036/Reflection-in-VBA-a-CreateObject-function-for-VBA

Estratto:

VBA non supporta riflessione, un concetto OOP che ha molti sfaccettature, tra cui la possibilità di creare un'istanza di una classe senza conoscendo il suo tipo in fase di progettazione. Reflection offre una grande flessibilità che è terribilmente assente da VBA (almeno per quelli di noi che amano usare VBA per più di quanto è in genere previsto).

ci sono alcune cose di riflessione come possibili:

Esempio

Per esempio, se ho voluto creare un'istanza di un oggetto Application di Excel senza dover dichiarare il tipo in modo esplicito nel codice (utilizzando Set xlApp = nuovo Excel.Application), posso farlo utilizzando il seguente livello di riflessione codice di creazione oggetto:

Dim xlApp As Excel.Application 
Set xlApp = CreateObject(,"Excel.Application") 

Questo è l'equivalente di tipo specifica scheda

Set xlApp = New Excel.Application 

anche:

È possibile utilizzare assylias approccio per interrogare il proprio codice (utilizzando espressioni regolari o qualche altra analisi per individuare le parti del codice siete interessati a):

yourWorkbook.VBProject.VBComponents("MyModule").CodeModule 

ci sono alcuni contatti interessanti in questo post: Iterating through the Object Browser in VBA

+0

È anche possibile ottenere in qualche modo membri privati ​​(come le proprietà) di un'istanza del modulo di classe? –

Problemi correlati