Transcrire la fonction VBS ExecuteGlobal en VB.NET
Bonjour,
Pour une application en VB.NET, je suis en train d'adapter un ancien script VBS.
J'ai presque réussi à tout reprendre mais je bloque sur la fonction "ExecuteGlobal".
Voici la séquence que je cherche à adapter :
Code:
1 2 3 4 5
|
ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))"
Txt.SetId valtext |
"texti" est une variable.
Idem pour DevCount.
Cette fonction ExecuteGlobal renvoye alors une nouvelle valeur, sous la variable valtext, utilisée à la seconde ligne de ce script.
J'ai tenté de réaliser une fonction sous VB.NET comme celle ci-dessous, mais cela ne marche pas.
Code:
1 2 3 4 5 6 7 8 9 10
|
ExecuteG(valtext, texti)
Sub ExecuteG(ByVal valtext, ByVal texti)
valtext = "text" & texti & ".item(cstr(DevCount))"
End Sub |
Quelqu'un pourrait-il m'aider ?
Merci par avance.
Transcrire la fonction VBS ExecuteGlobal en VB.NET
Bonjour Licardentaistor et merci pour la réponse.
J'ai modifié mon script en y plaçant la fonction mais hélas cela ne fonctionne pas.
Code:
1 2 3 4 5 6 7
|
Modifie(valtext, texti)
Function Modifie(ByVal valtext, ByVal texti) As String
valtext = "text" & texti & ".item(cstr(DevCount))"
Return valtext
End Function |
J'ai fait l'essai en ajoutant la variable DevCount dans l'appel de la fonction, mais cela ne change rien.
Code:
1 2 3 4 5 6 7
|
Modifie(valtext, texti, DevCount)
Function Modifie(ByVal valtext, ByVal texti, ByVal DevCount) As String
valtext = "text" & texti & ".item(cstr(DevCount))"
Return valtext
End Function |
Dans la fonction, j'ai également inclus un Msgbox juste avant le Return valtext pour afficher le contenu de la variable valtext.
A la place du résultat qui devrait être une valeur numérique, il m'affiche: text101.item(cstr(DevCount)).
La variable texti correspond bien au chiffre 101 mais le teste de la fonction a été interprété comme du texte.
Quand je regarde la syntaxe : ExecuteGlobal("valtext= text" & texti & ".item(cstr(DevCount))"), c'est un peu comme si on écrivait une formule Excel avec un =
Transcrire la fonction VBS ExecuteGlobal en VB.NET
Merci licardentaistor,
Bon, visiblement c'est bien le "text" placé juste après le = qui pose problème.
item n'est pas une variale, ce mot fait partie d'une syntaxe qu'il faut garder, comme le mot text.
Cette fonction ExecuteGlobal est appelée dans une boucle qui se répète 3 fois.
Je viens de faire l'essai en supprimant cette boucle et l'appel de la fonction en répétant 3x la syntaxe.
J'ai déclaré comme objet text102, text103 et text104 en répétant 3 fois mon script.
Code:
1 2 3 4 5 6 7 8 9 10 11
|
valtext = text102.item(CStr(DevCount))
...
valtext = text103.item(CStr(DevCount))
...
valtext = text104.item(CStr(DevCount))
... |
Cela fonctionne ainsi mais j'aurais quand même voulu laisser mon texti de départ avec une boucle pour texti = 102 to 104.
Mais la syntaxe suivante indique une erreur :
Code:
1 2 3
| For texti = 102 to 104
valtext = text & texti & .item(CStr(DevCount))
Next |
Ce qui semble logique puique "text" n'est pas une variable.
Je comprend maintenant l'utilité de ExecuteGlobal avec la fonction "valtext= text" & texti & ".item(cstr(DevCount))" faite en VBS mais y a t il un moyen de garder la boucle en VB.NET ?
Transcrire la fonction VBS ExecuteGlobal en VB.NET
Je ne suis pas sur de comprendre pour les textbox dynamiques.
Sinon, pour remplacer mes text102, text103 et text102, j'ai tenté de créer un nom dynamique selon un exemple sur un forum :
Code:
1 2 3 4 5 6 7 8 9 10
|
For texti = 102 To 104
Dim texto As Object
texto = New Object
texto.name = "text" & "(" & texti & ")"
valtext = texto.item(CStr(DevCount))
Next |
Mais, j'obtiens une erreur et je ne comprends pas pourquoi : Le membre public 'name' du type 'Object' est introuvable.
Si je ne trouve pas un autre moyen, je vais supprimer cette boucle et écrire 3 fois la séquence en changeant juste les text10...
Transcrire la fonction VBS ExecuteGlobal en VB.NET
Bonjour Thumb down et merci pour ce retour.
Le programme VBS que j'ai repris permet de se connecter à un logiciel de dessin, de trouver des champs de texte à des endroits particuliers dans des plans et de les recopier sur une page via la déclaration d'un tableau iShTab
Je suppose que la syntaxe particulière ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))" est liée au langage de ce logiciel.
J'ai d'ailleurs du ajouter une référence dll pour ce nouveau script fait sur VisualStudio 2010.
Ce sript complet est beaucoup trop complexe et je n'ai besoin que d'en reprendre une partie.
Voici une partie de l'ancien code en VBS :
La variable Cint(nbattr) est calculée sur base d'une donnée externe (fichier INI), mais pour mon besoin elle doit avoir comme valeur 3.
Pour mon script VB.NET, je peux donc remplacer iShtatt par la valeur 104.
Code:
1 2 3 4 5 6 7 8 9
| DevCount = 1
iShTab = 2
iShtatt = 101 + Cint(nbattr)
For texti = 102 To iShtatt
ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))"
Txt.SetId valtext
Txt.SetText Replace(ShtTab(i,iShTab), Chr(13), " ")
iShTab = iShTab + 1
Next |
Voici le nouveau script VB.NET qui fonctionne en l'état:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| DevCount = 1
iShTab = 2
Dim valtext As String
valtext = text102.item(CStr(DevCount))
Txt.SetId(valtext)
Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
iShTab = iShTab + 1
valtext = text103.item(CStr(DevCount))
Txt.SetId(valtext)
Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
iShTab = iShTab + 1
valtext = text104.item(CStr(DevCount))
Txt.SetId(valtext)
Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
iShTab = iShTab + 1 |
Puisque la boucle d'origine se produit 3 fois et que je suis bloqué avec cette syntaxe ExecuteGlobal, j'ai pu contourner le problème en écrivant 3x la séquence.
La syntaxe valtext = text102.item(CStr(DevCount)) est compréhensible pour le script.
Idéalement, j'aurais préféré gardé la boucle 102 à 104 mais si je remplace 102 par une variable, le mot text placé devant génère une erreur.