Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Como hago para que Call pase el valor en Visual Basic?

Estas en el tema de Como hago para que Call pase el valor en Visual Basic? en el foro de Visual Basic clásico en Foros del Web. Tengo problemas con la funcion Call en Visual Basic para Excel ya que el codigo de abajo cuando va a la subrutina Letras no pasa ...
  #1 (permalink)  
Antiguo 14/06/2008, 15:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 24
Antigüedad: 17 años, 8 meses
Puntos: 0
Como hago para que Call pase el valor en Visual Basic?

Tengo problemas con la funcion Call en Visual Basic para Excel ya que el codigo de abajo cuando va a la subrutina Letras no pasa ningun valor en la variable letra asi lo ponga en parentesis sencillos o dobles o le ponga ByRef. En mi casa si corre pero en la Universidad que la version es mas antigua, no corre. Como puedo hacer para que me pase un valor A, B, etc. en letra??????

Private Sub Ejecutar_Click()

For dia = o to 365

columnafinal=2
Call Letras(columnafinal, (letra))
letra_fin = letra
'El resto del progarma

Next dia

End Sub
--------------------------------------...
Public Sub Letras(ByVal columna As Integer, ByRef letra As String)

Select Case columna
Case 1
letra = "A"
Case 2
letra = "B"
Case 3
letra = "C"
Case 4
letra = "D"
Case Else
Stop
End Select

End Sub
  #2 (permalink)  
Antiguo 15/06/2008, 02:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 5 meses
Puntos: 16
Respuesta: Como hago para que Call pase el valor en Visual Basic?

yo veo que no estas dando ningún valor a letra y que la llamada seria
Call Letras(columnafinal, letra)
  #3 (permalink)  
Antiguo 15/06/2008, 05:27
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Como hago para que Call pase el valor en Visual Basic?

Cita:
Iniciado por abeh Ver Mensaje
Tengo problemas con la funcion Call en Visual Basic para Excel ya que el codigo de abajo cuando va a la subrutina Letras no pasa ningun valor en la variable letra asi lo ponga en parentesis sencillos o dobles o le ponga ByRef. En mi casa si corre pero en la Universidad que la version es mas antigua, no corre. Como puedo hacer para que me pase un valor A, B, etc. en letra??????
Hola,

un procedimiento Sub no devuelve ningún valor, ese código funcionará si la variable letra está declarada como Public (o al principio del módulo).

Para devolver un valor necesitas una Función. Te pongo un ejemplo en el que con sólo una línea de código obtienes lo esperado:

Código:
Private Sub Ejecutar_Click()
For dia = 0 To 365
    columnafinal = 2
    letra_fin = Letras(columnafinal)
    'El resto del progarma
    '.... aquí supongo que incrementarás el valor de columnafinal, sino te va a repetir
    '366 veces el mismo proceso y con el mismo valor
Next dia
End Sub

Public Function Letras(ByVal columna As Integer) As String
Letras = Chr(columna + 64)
End Function
  #4 (permalink)  
Antiguo 16/06/2008, 01:55
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Como hago para que Call pase el valor en Visual Basic?

Hola!

Manzarinaa tiene razón: si pasas la variable entre paréntesis, estás haciendo un cambio de tipo (lo que se llama casting), que para VB significa que dentro de la función es una variable nueva y distinta a la que está fuera. Es decir, la variable "letra" tiene una posición en memoria, pero si la pasas como "(letra)", le estás diciendo que copie "letra" en otra posición temporal y la pase como cadena, en este caso, ya que es así como está definida la función. Por tanto, la función "Letras" está modificando una variable que desaparece al terminar la llamada y no está disponible en la siguiente instrucción. Además, también es bueno que inicialices las variables antes de usarlas.

No obstante, lo recomendable es que definas la función como te ha dicho Avellaneda, porque es más legible y es la forma en que se debe hacer para obtener valores, y que te reserves los paréntesis únicamente para los "truquillos"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:58.