Ciao a tutti, da giorni sto provando a cercare e testare diverse soluzioni per riuscire a richiamare delle sub tramite una stringa contenente semplicemente il nome della sub, ho cercato e trovato diverse soluzioni sia usando la CallByName sia passando per la Reflection, ma nessuna soluzione funziona, vi riporto come esempio le soluzioni usate ed i relativi problemi.
Soluzione tramite CallByName:
In questa soluzione ho provato ad usare diversi riferimenti nella prima parte della CallByName mettendo come primo parametro il progetto,la come corrente, il nome della sub, il nome del modulo che la contiene, ho poi provato a cercare di creare un oggetto da poter passare partendo dla nome del modulo che lo contiene sia con la CreateObject che con la GetObject (essendo che dovrebbe già esistere...) ma in tutti i casi dice che il componente ActiveX non può creare l'oggetto (ho anche provato a dichiarare il modulo come classe pubblica e aggiungere l'istanza new ma anche in questo caso né create né get object funzionavano).codice:Dim objArgs As Object = Nothing Dim mdlRef As String mdlRef = "Mdl_" & strSubName objArgs = CreateObject(mdlRef) CallByName(mdlRef, strSubName, CallType.Method)
Soluzione tramite reflections:
Anche qui ho fatto diversi test ma miMetodo rimane sempre a nothing, ho provato sia passando in strSubName il nome della sub sia il nome del modulo o della classe che lo contiene ma sempre invano, idem i test usando assembly anzichè direttamente la Type...codice:Dim MioAmbito As Type = Me.GetType() 'Dim asmAssembly As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly 'Test per passare da assembly anziché da MioAmbito Dim miMetodo As System.Reflection.MethodInfo = MioAmbito.GetMethod(strSubName) Dim objArgs As Object = Nothing If McrsParam = "" Then objArgs = Nothing Else objArgs = StrParam End If If IsNothing(objArgs) Then miMetodo.Invoke(Me, Nothing) Else miMetodo.Invoke(Me, objArgs) End If
Spero qualcuno abbia avuto più fortuna di me e sappia come fare quest'oprazione all'apparenza semplice
Grazie


Rispondi quotando