string - una - Argumentos de acceso de VBA que pasan valores
retornar valor function vba excel (2)
Construyendo un poco sobre la respuesta de @Sorcer, VBA tiene parámetros Sub / Funciones predeterminados que pasan "por referencia" (es decir, se asume la palabra clave "ByRef" si no se especifica), de modo que si no quieres que sus modificaciones "internas" sobrevivan fuera de ellos, escribir explícitamente la palabra clave "ByVal" delante de ellos en la lista de argumentos.
Pero tiene la opción de evitar que tales modificaciones sucedan por completo al usar StrComp()
:
Function InStringCheck(Phrase as string, Term as string) as Boolean
InStringCheck = StrComp(Phrase, Term, vbTextCompare) = 0
End Function
Lo cual también podría llevarlo a evitar el uso de InStringCheck()
a favor de un uso directo de StrComp()
en su código
Acceso 2013
Estoy llamando a una fórmula para modificar una cadena y está cambiando los valores w / en el sub padre.
Ejemplo:
Debug.Print Str ''Hello World my name is bob
BOBexists = InStringChceck(Str,"bob")
Debug.Print Str ''HELLO WORLD MY NAME IS BOB
Debug.Print BOBexists ''TRUE
He usado esta función, InStringCheck, en Excel VBA antes (y es solo un ejemplo, todas mis herramientas de cadenas están haciendo lo mismo ahora y no sé por qué)
Function InStringCheck(Phrase as string, Term as string) as Boolean
Phrase = UCase(Phrase)
Term = UCase(Term)
if instr(1, Phrase, Term) then InStringCheck = True else InStringCheck = False
end function
En varias de mis funciones manipulo las variables de entrada, para llegar a una solución, pero no quiero que esas manipulaciones persistan fuera de la función a menos que las vuelva a pasar, algo así como que se están pasando, pero '' no son dimed como variables públicas
Los parámetros de VBA se pasan implícitamente por referencia ( ByRef
). Esto significa que está pasando una referencia al valor, no al valor en sí mismo: mutar ese valor dentro del procedimiento dará como resultado que ese valor mutado sea visible para el código de llamada.
Esto a menudo se usa como un truco para devolver múltiples valores de una función / procedimiento:
Public Sub DoSomething(ByVal inValue1 As Integer, ByRef outResult1 As Integer, ...)
Tienes dos opciones:
- Pase los parámetros por valor (
ByVal
) - Introduce variables locales y muévelas en lugar de mutar los parámetros (y demonios, pasa los parámetros
ByRef
explícitamente)
Si tiene muchas apariciones de parámetros que ByRef
pasa implícitamente en su proyecto, arreglarlos en cualquier lugar puede ser tedioso. Con Rubberduck puede localizar fácilmente todas las ocurrencias, navegar allí y aplicar las correcciones apropiadas:
Descargo de responsabilidad: estoy muy involucrado en el proyecto Rubberduck.