none
como poder llamar a una variable de entre dos iguales RRS feed

  • Pregunta

  • Saludos a todos.

    Tengo un dilema. No se si se puede hacer y por ello formulo la pregunta. Estoy simplificando código, y en concreto tengo dos procedimientos exactamente iguales que asignan datos a dos variables distintas dependiendo de la condición de la persona. Necesito saber si se puede hacer algo como esto (que logicamente no es correcto):

    'Variables

    Private Type xPersona
        Idper As String
        Dni As String
        ......

    end type

    Public xAlumno as xPersona

    Public xTutor as xPersona

    If InStr(1, Me.Tag, "Alumno", vbTextCompare > 0) Then
            With xAlumno
        ElseIf InStr(1, Me.Tag, "Tutor", vbTextCompare > 0) Then
            With xTutor
        End If

                  .xdni = tbDni

                  ......

           End with

    Como vereis, se trata de poder llamar a la variable en cuestión

    sábado, 5 de enero de 2013 15:12

Todas las respuestas

  • Saludos a todos.

    Tengo un dilema. No se si se puede hacer y por ello formulo la pregunta. Estoy simplificando código, y en concreto tengo dos procedimientos exactamente iguales que asignan datos a dos variables distintas dependiendo de la condición de la persona. Necesito saber si se puede hacer algo como esto (que logicamente no es correcto):

    'Variables

    Private Type xPersona
        Idper As String
        Dni As String
        ......

    end type

    Public xAlumno as xPersona

    Public xTutor as xPersona

    If InStr(1, Me.Tag, "Alumno", vbTextCompare > 0) Then
            With xAlumno
        ElseIf InStr(1, Me.Tag, "Tutor", vbTextCompare > 0) Then
            With xTutor
        End If

                  .xdni = tbDni

                  ......

           End with

    Como vereis, se trata de poder llamar a la variable en cuestión

    Buenas tardes,

    puedes explicar un poco más tu consulta?, he tratado de entender lo que necesitas y no puedo.

    Saludos,

    Jhonny Vargas P.

    @ el viejo guatón Vargas!!!


    Jhonny Vargas P - Santiago de Chile

    lunes, 7 de enero de 2013 21:23
  • Tal vez podrias hacer la asignacion de datos a una tercer variable, xPersTemp por ejemplo, y al finalizar el procedimiento hacer la pregunta: 

    If InStr(1, Me.Tag, "Alumno", vbTextCompare > 0) Then
            xAlumno = xPersTemp
        ElseIf InStr(1, Me.Tag, "Tutor", vbTextCompare > 0) Then
            xTutor = xPersTemp
        End If
    

    Espero que te sea de utilidad.

    Saludos desde Mexico.


    EmmaRmz

    lunes, 7 de enero de 2013 22:28
  • Estimado Sargento369:

         La clausula With es un bloque y no admite un condicionamiento.

         La solución es la que propone EmmaRmz.

         Este es el modelo completo del código de ejemplo:

    Private Type xPersona

        Idper As String
        xDni As String
        ...

    End Type

    Public xAlumno As xPersona

    Public xTutor As xPersona

    Private Sub Procedimiento()

        Dim xTemporal As xPersona

        With xTemporal

              .xDni = tbDni

              ...

        End with

        If InStr(1, Me.Tag, "Alumno", vbTextCompare > 0) Then

            xAlumno = xTemporal

        ElseIf InStr(1, Me.Tag, "Tutor", vbTextCompare > 0) Then

            xTutor = xTemporal

        End If

    End Sub

    Atte.

    Rafael




    • Editado Rafael2ra sábado, 12 de enero de 2013 2:49
    martes, 8 de enero de 2013 14:42
  • ¿Para que haces eso?

    Si el objeto es exactamente el mismo por que no añades un tipo a persona (para identificar si es profesor o alumno)

    y si necesitas algo pues preguntas si es alumno o profesor...

    Quedaría así:

    Private Type xPersona

        Idper As String
        xDni As String

        Tipo as string

         ...

    End Type

    Public xAlumno As xPersona

    Private Sub Procedimiento()

        Dim xTemporal As xPersona

        With xTemporal

              .xDni = tbDni

              ...

             .Tipo = Me.tag ----> ???

        End with

    End Sub

    De esta forma quitamos código inútil como pueden ser esos if, las funciones de comparación con instr ect...

    y siempre sabemos si es profesor o alumno.

    (Es una idea)

    Saludos.

    sábado, 12 de enero de 2013 15:08