Bonjour,
En ce moment je suis en train d implemeter un librairie COM avec VB.net ( VS2008) pour l'utiliser grace a du code VBA dans EXCEL 2003.
Cependant je suis confronte a de sacre probleme dans mon code VBA : je n arrive pas a envoyer des objets crees dans mon VBA vers ma libraire COM. Pour faire simple.
En VBA, Je cree une instance A_inst d une classe A_class de la librarie avec les donnes de la spreadsheet et qd j utilise A_inst lors la creation d une objet de la class B_class venant de ma librairie com, je me retrouve avec une erreur :
Run-time error '438'
Object doesn't support this property or method
Je donne le code VBA et VB.Net ci joint :
et le code VB.net correspondant dans la lib com
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 'Code VBA Private Sub init() Dim SubPV as ComLibrary.SubPV Set SubPV = New ComLibrary.SubPV Dim LoObject As ComLibrary.Lo Set LoObject = New ComLibrary.Lo 'Erreur 438 ici .. SubPV.addAsset (LoObject ) End Sub
J ai meme essaye d exporter un objet spreadsheet ( la feuille excel active) dans la libraire pour faire toutes les creations d instance et le traitement a l interieur pour miniser l utilisation de VBA mais je me retrouve avec type mismatch alors que j importe un object worksheets...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Option Explicit On 'System 'Imports Microsoft.Office.Interop.Excel Imports System Imports System.Runtime.InteropServices Imports System.Collections Imports System.Collections.Generic <ComClass(SubPV.ClassId, SubPV.InterfaceId, SubPV.EventsId)> _ Public Class SubPV Implements ICloneable public _lportfolio As List(Of Lo) Public Sub addAsset(ByVal elt As ComLibrary.Lo) _lportfolio.Add(elt) End Sub End Class
J ai l impression que VBA et VB.net COM lib ont du mal a communiquer sur le type des objets : Sur un meme objet chaque a un type different ...
pour un objet workbook ou worksheet ca devrait etre le meme et le passage en parametre d un tel objet devrait bien se faire. Pourtant dans mon code, c est pas le cas...
Je commence a perdre mon latin
Quelqu un aurait-il une idee sur ce probleme ?
Merci d avance
bsm
Partager