Usuario
como poder llamar a una variable de entre dos iguales

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
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
-
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
-
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
-
¿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 StringTipo 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.