J'ai besoin de conseils sur la manière de conserver une valeur variable attribuée dans "Sous-Sous" et transmettez-la sur "Sub principal"
Code ressemblerait à ceci: p>
Global DocDate as String Sub Main() ```(some code before)``` Call RemitterParsing ```this goes for 8 different values``` Set objDocDate = objDoc.createElement("PayerDocumentDa") objRemitt.appendChild objDocDate objDocDate.Text = DocDate End Sub Private Sub RemitterParsing() OpenPosition = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "PayerDocumentDa>") closeposition = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "</PayerDocumentDa") DocDate = Mid(Range(foundRmt.Address).Offset(2, 0).Value, OpenPosition + 16, closeposition - OpenPosition - 16) End Sub
3 Réponses :
Votre code fonctionne comme c'est.
Mais je conseillerais contre l'utilisation d'utiliser des variables code> code> sauf si nécessaire, et passez des variables entre les sous-marins, comme suit: P>
Option Explicit Sub Main() Dim var1 As String ' declare a variable in scope with Main sub assignValue var1 ' call 'assignValue' sub passing it the variable to be set MsgBox var1 ' see variable has been set End Sub Private Sub assignValue(var1 As String) ' have the sub accept a variable as argument var1 = "Hello" ' set the passed variable End Sub
Peut-être qu'une fonction est plus facile à comprendre qu'un (implicite!) Byref pour les débutants. Et une procédure qui attribue qc. indique une propriété Let / Set pour moi.
Désolé tout le monde, mon approche a fonctionné, mais j'ai trouvé une erreur. J'ai déclaré que la valeur se trouve à nouveau à nouveau "Dim". L'a supprimé et cela a fonctionné p>
Si je lisais ce commentaire Droit (", mon code d'origine doit renvoyer 8 valeurs différentes ..."), vous voudrez peut-être essayer quelque chose comme ça, en utilisant un Type défini par l'utilisateur (UDT, communément appelé Structure code> dans d'autres langues):
' Define the UDT in the General section of a module
Type MyReturnValues
' Expand the individual UDT members as needed
Value1 As String
Value2 As Long
Value3 As Date
' ... More members, if needed
DocDate As String
End Type
Sub Main()
Dim udtReturn As MyReturnValues
' ```(some code before)```
udtReturn = RemitterParsing()
' Show the results of RemitterParsing()
With udtReturn
Debug.Print "Value1: "; .Value1, "Value2: "; .Value2, "Value3: "; .Value3, "DocDate: "; .DocDate
End With
' ```this goes for 8 different values```
Set objDocDate = objDoc.createElement("PayerDocumentDa")
objRemitt.appendChild objDocDate
objDocDate.Text = DocDate
End Sub
Private Function RemitterParsing() As MyReturnValues
Dim udt As MyReturnValues
OpenPosition = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "PayerDocumentDa>")
closeposition = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "</PayerDocumentDa")
udt.DocDate = Mid(Range(foundRmt.Address).Offset(2, 0).Value, OpenPosition + 16, closeposition - OpenPosition - 16)
' Populate a 2nd UDT member
OpenPosition2 = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "PayerDocumentDa>")
closeposition2 = InStr(Range(foundRmt.Address).Offset(2, 0).Value, "</PayerDocumentDa")
udt.Value1 = Mid(Range(foundRmt.Address).Offset(2, 0).Value, OpenPosition + 16, closeposition - OpenPosition - 16)
' Add random stuff for demonstration
With udt
.Value2 = 123
.Value3 = Now()
End With
' Return the values
RemitterParsing = udt
End Function
Veuillez prendre le Tour . et lisez Comment demander à puis modifier la question (par exemple, recherche Web pour le titre de la question et ajouter du code qui est pertinent, comme votre L'échantillon ne échouera pas sur la portée tant que le code est dans le même module).
Quel est votre message? Je m'attendrais à ce que votre code fonctionne. Sans plus de détails, il est très difficile d'aider, mais avez-vous vraiment besoin d'utiliser une variable globale? Pouvez-vous ne pas activer assigntureValue en une chaîne de retour de la fonction?
La chose est mon code d'origine doit renvoyer 8 valeurs différentes et pour une raison quelconque, cette approche retourne en blanc.