Visual Basic - Variables dinámicas

Life is soft - evento anual de software empresarial
 
Vista:

Variables dinámicas

Publicado por Elias Cancino (14 intervenciones) el 06/04/2005 17:11:22
Necesito saber si es posible hacer referencia a una variable si el nombre de esta ha sido generado a partir de una cadena. Para ejemplificar mi duda :

dim var1 as string
dim var2 as string
dim var3 as string
dim var_oracion as string

var1= "un "
var2= "perro "
var3= "me mordió "
for i=1 to 3
var_oracion = var_oracion & varN ' Como hago para que este nombre
'de variable se incremente
next i

Espero entiendan mi pregunta y mejor que eso, que me la respondan. No necesito soluciones con arreglos u objetos numerados. De antemano muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Variables dinámicas

Publicado por Christian (675 intervenciones) el 06/04/2005 17:15:42
for i=1 to 3
var_oracion = var_oracion & var&i
next i
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 17:21:56
No era eso lo que esperaba Christian. Creo que no entiendes la pregunta. Si te fijas en el ejemplo, yo ya se usar concatenadores de cadena, lo que no se es hacer que una cadena se transforme en variable. Ah, la idea es que en var_oracion al final quede el valor "Un perro me mordió"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Christian (675 intervenciones) el 06/04/2005 17:27:34
Con lo que te di te va salir:
"Un perro me mordio"

Nose que es lo que quieres, no te entiendo-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 17:40:17
¿En que version de VB lo probaste? me parece que no es la misma que la que yo tengo, aunque en realidad eso no deberia importar, pero por lo menos en mi VB, tu solucion no entrega "Un perro me mordió" sino que entrega "123".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Christian (675 intervenciones) el 06/04/2005 17:50:40
Bueno tio qe alguien te ayude.... pero parece qye nadie se interesa por tu pregunta simplona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 17:57:56
Simplona y todo lo que quieras, igual te quedó grande...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Apolos (1 intervención) el 06/04/2005 18:00:46
puede ser simplona pero nadie la ha podido responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Eduardo (138 intervenciones) el 06/04/2005 18:03:20
que piense un poco pues. Todo facil quiere.!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Sapotec (1 intervención) el 06/04/2005 18:08:29
Gracias por la ayuda tropa de vagonetas, si no saben, mejor no contesten huevadas........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

prueba con este codigo

Publicado por carlos (101 intervenciones) el 06/04/2005 19:04:19
mira no se si es lo que esperas, pero al menos la lógica deberia ayudarte a tratar de llegar a lo que quieres hacer.. espero te sirva

---------------------------------------------------
Dim var1 As String, var2 As String, var3 As String, oracion As String, var As String

Private Sub Command1_Click()
For i = 1 To 3

oracion = oracion & llamar_cadena(i)
Next
Text1 = oracion
End Sub

Private Sub Form_Load()
var1 = "un "
var2 = "perro "
var3 = "me mordio"
var = "var"
End Sub
Function llamar_cadena(ByVal i As Integer) As String
Select Case i
Case 1
llamar_cadena = var1
Case 2
llamar_cadena = var2
Case 3
llamar_cadena = var3
End Select
End Function
------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:prueba con este codigo

Publicado por Elias (14 intervenciones) el 06/04/2005 20:44:25
Gracias Charlie, igual me sirve para el ejemplo que puse, pero la idea es hacerlo genérico, pues si tuviera 20 variables, la idea seria no hacer 20 cases distintos si no que uno solo. Igual, muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:prueba con este codigo

Publicado por carlos (8 intervenciones) el 06/04/2005 22:12:32
entonces.. que chuch@ quieres MIERD@!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:prueba con este codigo

Publicado por Anonimo (2 intervenciones) el 06/04/2005 22:15:26
apoyo a los ultimos 2 comentarios...!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:prueba con este codigo

Publicado por Christian (675 intervenciones) el 06/04/2005 22:19:58
Si no te explicas, nadie te va a poder ayudar, nadie ha entendido tu pregunta, aca todos sabemos, lo que no sabemos es ser adivinos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:prueba con este codigo

Publicado por Elias (14 intervenciones) el 07/04/2005 00:08:33
Oye Christian, cuando leí tu primera respuesta me extrañó lo estúpida que era, pues en ningún caso se acercaba a la solución, fue una respuesta tonta. Pero ahora entiendo por que respondes leseras sin que te importe mucho. Quieres sumar puntos para aparecer más experto en la tabla de los + expertos. No es buena práctica lo que haces
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 23:43:57
A ver, a ver. Por lo visto ustedes saben leer pero no entienden lo que leen. Parece que tienen problemas con las oraciones muy largas pues con más de 6 palabras pierden el hilo de la idea. Les he dado un ejemplo super sencillo para que lo entiendan, que incluso pueden copiar y pegar en un formulario vb y hacer las pruebas que estimen convenientes (¿Les cuesta mucho hacer un copiar y pegar?), les he explicado más de una vez de buena forma, pero aún así no entienden. ¿Que puedo esperar entonces, si aun que les explique con peras y manzanas no van a entender? Ah, pero entienden perfectamente cuando uno les dice "no entiendes lo que quiero", se hacen los ofendidos, me culpan a mi de su mala lectura y comienzan a despotricar contra mi. No los entiendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 23:46:16
Pero comencemos denuevo (si aun tienen alguna neurona sin quemar). Supongamos que uno de esos informáticos que tienen cosas importantes que hacer creó una aplicación donde en un procedimiento ocupa 50 variables distintas, las cuales tiene que evaluar. Las variables son distintas pero muy similares y son como muestra el ejemplo que sigue:

Dim var1 as string
Dim var2 as string
Dim var3 as string
Dim var4 as string
.
.
.
Dim var50 as string
(Espero que entiendan los dim)

Ahora que tenemos 50 variables distintas pero muy parecidas debo evaluarlas una a una. Cada una de estas evaluaciones es extensísima, pero cambiaremos todo ese código por un simple print en el debug (espero que también entiendan esto del debug)

debug.print var1
debug.print var2
debug.print var3
debug.print var4
.
.
.
debug.print var50

La pregunta es la siguiente, pongan atención:

¿Es posible hacer un ciclo for como el que sigue?

For i = 1 to 50
debug.print var(i)
Next i

Donde var(i) es en realidad el nombre de variable var con el numero que toma i i.e.

Var(i) = var1 cuando i= 1

continua...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (14 intervenciones) el 06/04/2005 23:47:04
i.e. ¿se puede hacer referencia a variables a partir de una cadena?
i.e. ¿como hago referencia a todas y cada una de las variables dentro del ciclo en forma genérica? (como la solución de carlos, pero sin un case para cada variable)
i.e. ¿como hago referencia a todas y cada una de las variables dentro del ciclo en forma genérica concatenando cadenas? (La solución entregada por Christian no sirve y es mentira que a él le arrojaba la oración completa, pues ni siquiera se tomó el tiempo de probar lo que sugirió)

No puedo ser más claro y sencillo, pues para hacer esto más gráfico debería hacer un curso de pedagogía diferencial y después explicarles.

Necesito saber puntualmente como se hace esto, no me sirven las formas alternativas.

Si se la puede, juegue, sino, no tire basura a la gente por su poco C.I.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Mike79 (97 intervenciones) el 07/04/2005 00:35:34
Jejejeje, pues creo que si te hace falta el curso de peda-gogia

Pues haber, platiquemos entonces de VBasic a nivel ya mas robusto.
En VBasic, a diferencia de otros lenguajes como perl, no puedes evaluar el contenido de una variable, tampoco puedes usar variables referenciadas, por lo consiguiente no puedes evaluar el contenido de una variable como si fuera otra variable. (No me importa si los demas entendieron o no, si Elias lo capta me basta).

VBasic es un lenguaje de programación sencillo, se esfuerza por hacer las cosas sencillas y mantenerlas asi. No existe una colección de variables que puedas accesar para recorrer todas y cada una de las variables, ni tampoco puedes evaluar el contenido de las variables y ejecutarlas.

De hecho vbasic es tan pero tan sencillo, que no puedes usar punteros. Y al trabajar con objetos en windows, es muy dificil programar algunas cosas sin usar punteros.

No se si me creas, pero enserio te digo, que no se puede, las unicas colecciones de objetos que existen son: Forms, Printers y Controls

Si en lugar de variables tuvieras Controls, lo podrias hacer.

Por ejemplo:
Supongamos que tienes Text1, text2, text3, text4..... text50 (que son controles de tipo text).

Entonces podrias hacer:

Dim Resultado As String
Resultado = ""

For Each Control In Controls
If Mid(Control.Name, 1, 4) = "Text" Then
Resultado = Resultado + " " + Control.Text
End If
Next
Debug.Print Resultado

Tambien podrias crear tu propia coleccion de objetos, pero no se si te sirva.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por BENJO (679 intervenciones) el 07/04/2005 04:18:55
Elias
El código que pongo a continuación te facilita hacer lo que deseas, con variables, es decir, utilizar las variable por su numeración invocándolas con string y no por su nombre nominal.
Digamos que sería mucho más sencillo hacerlo con vectores, pero evidentemente vos necesitás que sean variables
La única condición para que este código funcione, es que las variables que manejes sean Públicas

Private Declare Function EbExecuteLine Lib "vba6.dll" _
(ByVal pStringToExec As Long, ByVal Foo1 As Long, _
ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Public var0 As String
Public var1 As String
Public var2 As String
Public var3 As String
Public var4 As String
Public Oracion As String
Private Sub Command1_Click()
var0 = "Igual "
var1 = "los "
var2 = "punteros "
var3 = "existen "
var4 = "en VB "
Dim i As Integer
For i = 0 To 4
FExecuteCode "form1.Oracion=form1.Oracion & form1.Var" & i
Debug.Print Oracion
Next
End Sub
Function FExecuteCode(stCode As String, Optional fCheckOnly As Boolean) As Boolean
FExecuteCode = EbExecuteLine(StrPtr(stCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

ESPERO QUE TE SIRVA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Si se pudo...

Publicado por OtroAnonimo (1 intervención) el 07/04/2005 05:02:34
Si se pudo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Si se pudo...

Publicado por Elias (14 intervenciones) el 07/04/2005 15:50:02
Amigos, realmente agradezco vuestro tiempo y cooperación (ustedes sí saben leer). Después de leer vuestras respuestas vuelvo a sentir confianza en que hay gente de buena voluntad que entra a este sitio. Muchisimas gracias.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Si se pudo...

Publicado por Otro Argento (3 intervenciones) el 05/12/2022 20:39:46
Elias, que bueno que hace 7 años a otro "loco" se le ocurrió lo mismo que a mí y que tuviste la paciencia para explicarte muchas veces hasta encontrar uno que realmente tiene "comprensión de texto" y los conocimientos para resolver(nos) el problema.

Esto yo ya lo hice hace tiempo, en pascal que es super fácil y en batch que también es fácil pero no tan conocido, pongo el código para batch por si dentro de 7 años o más, alguien lo requiere:

set Clave1="Clave_Del_Usuario_1"
set Usuario=1

call set Clave=%%Clave%Usuario%%%
echo %Clave%

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Mike79 (97 intervenciones) el 07/04/2005 18:08:02
Yo no dije que los punteros no existieran internamente.
Lo que digo es que es muy problematico usarlos.
Yo uso varias apis de windows y por ejemplo, manejar la libreria winsock.dll directamente es un super castre.

Esta interesante tu API de VBasic que permite ejecutar un codigo. ¿Y como seria si es en VBasic5 o .Net ?.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Benjo (679 intervenciones) el 08/04/2005 04:47:49
En .Net no tengo ni idea, dado que todavía no me he aventudado a estudiarlo.

En Visual Basic 5 sería así
Declare Function EbExecuteLine Lib "vba5.dll" _
(ByVal pStringToExec As Long, ByVal Foo1 As Long, _
ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

' Y en VB For Application 97 sería así
Declare Function EbExecuteLine Lib "vba332.dll" _
(ByVal pStringToExec As Long, ByVal Foo1 As Long, _
ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Mike79 (97 intervenciones) el 09/04/2005 06:48:26
Interesante.
Gracias

-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Otro Argento (3 intervenciones) el 05/12/2022 20:29:16
Benjo, sencillamente:
GRACIAS TOTALES!
Sos verdaderamente un genio!
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Anonimo (100 intervenciones) el 07/04/2005 12:51:09
No tienes nada que entender o dejar de entender y los demás tampoco. Este es un foro de colaboración no de obligaciones. Si quieres exigir PAGAS un tutor y se acabó el problema.

A lo que te contestan es "tómalo o déjalo" nadie está obligado a nada. A ver si lo entiendes tu eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variables dinámicas

Publicado por Elias (2 intervenciones) el 07/04/2005 16:00:26
Tienen razón amigos realmente soy un IGNOR@NTE, la proxima vez no hare ninguna pregunta estupid@, mejor me dedico a lavar y planchar la ropa de mi hermana. BYE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ja Ja Ja

Publicado por Elias (2 intervenciones) el 11/04/2005 19:49:54
No había visto este mensaje. Que patético loco, que a uno lo suplanten. Algún cobarde debio haber sido. Y al final, igual yo tenía razón, ninguno de los gurues que me estaban insultando (Christian, Eduardo, Carlos, Mike y hasta un anónimo) pudo responder. Igual llegó la respuesta de gente que sí sabe (Grande Benjo, Gurú, no como estos otros vagos).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ja Ja Ja

Publicado por Anonimo (27 intervenciones) el 12/04/2005 16:52:06
para mi que Benjo, Gurú te la paran metiendo por eso tanta alabanza.
Saludos Elias JAJAJA perdiste bien feo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ja Ja Ja

Publicado por Elías (14 intervenciones) el 14/04/2005 17:27:30
Podrias ser más ingenioso para burlarte...
Además, ¿por que dices que yo perdí feo, si al final, eran ustedes los weones que no entiendieron la pregunta, pero igual alguien que sí sabe me respondió? Parece que tu no cachai bien la realidad.... ¿eres enfermo o algo así? Eso si, eres super cobarde, pues ni siquiera que atreves a poner tu correo. En lo sucesivo, y que quede claro para todos, solo responderé a comentarios inteligentes, y no a bodrios como este que escribió Anonimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

QUE RISA

Publicado por JAJA (1 intervención) el 18/04/2005 21:05:42
SERA QUE POR ESTO YA NO HACES PREGUNTAS??? O TE ESTAS DEMORANDO MAS PARA PODER ELABORARLAS DE UNA MEJOR MANERA?? BUENO, SUERTE CON LA SIGUIENTE PREGUNTA E S T U P I D A QUE HAGAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

otro camino

Publicado por Denarcien (1 intervención) el 30/09/2019 02:05:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
Public Sub Vardinamica()
    Dim Palabra() As String
    Dim N As Integer
    Dim Frase As String
    Dim i As Long
    N = InputBox("Introduzca cuantas palabras quiere")
    ReDim Palabra(1 To N)
    For i = 1 To N
        Palabra(i) = InputBox("Introduzca el valor de la palabra (" & i & "): ")
    Next i
    For i = 1 To N
        Frase = Frase & " " & Palabra(i)
    Next i
    MsgBox "La frase formada es:" & vbCr & Frase
    i = InputBox("Introduza el número de palabra que quiere averiguar. ")
    MsgBox "La palabra (" & i & ") es: " & Palabra(i)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ja Ja Ja

Publicado por Otro Argento (3 intervenciones) el 05/12/2022 20:48:15
Elias, estoy de acuerdo con lo que decis de los charlatanes que se la dan de gurús, pero metiste en la bolsa a Mike, que él sí tiene "comprensión de texto" y te respondió bien.
Lo que pasa es que Mike no hizo "trampa" cómo Benjo que se importó una .dll para agregar una funcionabilidad al VB la cual éste no posee.
Por mi parte, muchas gracias a Elías por hacer la pregunta, a Mike por su respuesta y a Benjo por la solución.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar