visual valor una sub retornar procedimiento parametros funciones funcion forma especifique ejemplos definir con string vba ms-access access-vba

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.