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

Problemas con Visual Basic con Excel

Estas en el tema de Problemas con Visual Basic con Excel en el foro de Visual Basic clásico en Foros del Web. Buenas gente, Hace poco que empecé a programar y descubrí esto del Visual Basic con Excel y ahora me encuentro con un problema que no ...
  #1 (permalink)  
Antiguo 11/11/2011, 17:02
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Pregunta Problemas con Visual Basic con Excel

Buenas gente,

Hace poco que empecé a programar y descubrí esto del Visual Basic con Excel y ahora me encuentro con un problema que no sé resolver. Haber si vosotros veis lo que yo no consigo ver:

El programa coge un número que le introduces (ex:1111, tiene que ser de 4 cifras aunque aún no he puesto que sea obligatoriamente de 4) y lo divide en dos partes (los 2 primeros números (N1) y los dos posteriores (N2) y te hace unas operaciones para poder asignar un código aparte del número de socio (en el caso de 1111, me da 6 y la letra B).

Mi problema esta en que ahora quiero hacer que entrando "6B" (del ejemplo anterior) me de como resultado el 1111. Podríais enseñarme como seria? :S

Sub socis()

Dim NS, N1, N2, acumulador, x, codicontrol, xifra As Integer
Dim lletra As String
NS = Range("B2").Value

N1 = Int(NS / 100)
N2 = NS - (N1 * 100)

acumulador = 0

For x = 1 To N2 Step 1

acumulador = acumulador + x

Next

N2 = acumulador * N1 * 13411


codicontrol = (N2 / 9 - Int(N2 / 9)) * 9

xifra = (N2 / 31 - Int(N2 / 31)) * 31

If xifra < 10 Then
lletra = "A"
ElseIf xifra >= 10 Or xifra < 19 Then
lletra = "B"
Else
lletra = "C"
End If

Range("B3").Value = NS & Int(codicontrol) & lletra

Grácias :)
  #2 (permalink)  
Antiguo 12/11/2011, 03:22
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola, analizando el código me temo que la operacion a la inversa es del todo imposible, básicamente porque las dos últimas cifras te devuelven una letra, de la manera
01 a 10 = A
11 a 19 = B
20 a 99 = C

Entonces es imposible que conociendo sólo B sepas a que valor corresponde ya que por ejemplo

1111 = 6B
1112 = 6B
1113 = 6B
1119 = 6B

Creo que si debes hacer la conversión, tendrás que buscar una solución de compactacion diferente.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 12/11/2011, 04:31
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Muchas grácias por tu aporte erbuson! :)

Cómo podria ser otra manera de compactación? Para tener una idea

PD: Cómo lo haria para que me coja de una misma celda ex "B3" un número y una letra? (aparte de ex: codicontrol=Mid(codiSoci,1,1) i lletra=Mid(codiSoci,2,1) ?

Grácias!
  #4 (permalink)  
Antiguo 12/11/2011, 07:26
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola, es muy dificil darte ideas, sin conocer exactamente la temática del problema:

¿ Cuales son los valores tope que puede haber ?
Si tenemos 1234 números, cual es el máximo de 12 y cual el de 34, ya que me llama la atencion el hecho de que los valores que das a los dos últimos.

01->10 A
11->19 B
20->?? C ¿ Que valor puede alcanzar ??

¿ Porque sólo dos valores de salida ?
¿ Que siginifican los numeros o porque los separas de dos en dos ?

Si es algo privado que no desees comentar en público pásame un mensaje y yo veo como responder, aunque lo intentaré en el foro, sin contar nada que no deba.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 13/11/2011, 05:20
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

A nono, no hay problema en comentarlo en público, lo único que no queria ser un cara dura y que me hicieran el ejercicio sin aprender nada ni mis fallos.

Es un ejercicio de la universidad. La primera parte esta echa, que es el código que te presente anteriormente pero la segunda parte no se como hacerla. El enunciado es el siguiente:

Resulta que uno de los factores que destaca según este estudio (además de los problemas que puedan tener determinados socios) es el porcentaje de retornos debido a errores de la propia entidad, que ha emitido recibos a socios distintos de los que realmente habían hecho las actividades. Parece que el error proviene de confusiones en el Número de Socio, que es el que se utiliza (en lugar del nombre) para componer el listado de recibos.
Para evitar más errores de este tipo, se ha decidido añadir al Número de Socio un código de control al estilo de los de las cuentas bancarias, que se verifique cada vez que un socio se apunte para hacer una actividad, y así evitar confusiones.
Así, el Número de Socio actual (NS), que es siempre un número de 4 cifras (el primer socio tiene el número 1001), se le añadirá un código de control (una cifra y una letra) que se calculará siguiendo los pasos siguientes :
• se divide el NS en dos partes, una con los dos primeros dígitos (N1) y la otra con los dos últimos (N2). Por ejemplo, si NS = 2136, N1 = 21 y N2 = 36.
• se calcula la suma de los N2 primeros números enteros (1 +2 +3 +...+ N2), se multiplica por N1 y por 13.411.
• el residuo de dividir el valor anterior por 9 será la cifra del código de control.
• se calcula el residuo de dividir este mismo valor (el del paso 2) por 31. Si el valor resultante es inferior a 10, se le asigna "A" como letra de control, si está entre 10 y 19 la letra "B", y si es superior la letra "C".

Se pide:
(A) Preparar el diagrama de flujo de un algoritmo que permita calcular el código de control diseñado por la entidad a partir de la entrada del número de cualquier socio de la misma. Escribir igualmente el algoritmo en pseudo-código.
(B) Diseñar la hoja excel que serviría para comprobar que un Número de Socio completo (entrando tanto las 4 cifras como el dígito y la letra de control) es correcto, y escribir la / las macros en visual Basic que permitirían hacer esta comprobación .

Nota: Es relativamente fácil encontrar los dígitos que forman un cierto número a partir de operaciones algebraicas simples. Por ejemplo, las decenas de un número de 2 cifras se pueden obtener calculando la parte entera de dividir el número por 10 (si N = 93, partsencera (93/10) = 9) y las unidades por diferencia (93-9 * 10 = 3)


Cómo lo ves ahora? Iba mal planteandolo como lo estaba planteando?

Muchas grácias por tu tiempo.
  #6 (permalink)  
Antiguo 13/11/2011, 06:40
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola, entiendo que no te estan pidiendo bajo ningun concepto que tengas que obtener el número a partir del código de verificacion.

El código de verificacion es necesario introducirlo para comprobar que el número es correcto.

O sea, que reromando tu ejemplo anterior si suponemos que 1111 te devuelve los valores &B, en realidad no estas convirtiendo 1111 a 6B sino que estás generando un numero de socio 11116B y lo que tu debes hacer es dividir el número en tres grupos de 2:

N1 = 11
N2 = 11
N3 = 6B

A partir de N1 y N2 reconstruir su codigo que logicamente te devolvera 6B y compararlo con N3 para verificar que el codigo introducido es correcto, de tal manera que si se introduce por ejemplo 11116A te diga que es incorrecto.

Este es en realidad el uso de los códigos de Control, por ejemplo imaginate el caso de los DNI que con una letra se convierten en en NIF, lo que se pretende es que si por ejemplo el DNI 42945769 le corresponde la letra J, cuando tu introduzcas 42945769Q, te diga que el código es incorrecto.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #7 (permalink)  
Antiguo 13/11/2011, 07:11
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Oki, genial ahora ya tengo una idea mucho más clara.

Grácias erbuson :D

PD: Una cosilla más N3, deberia declararla como un string o como un integer?
  #8 (permalink)  
Antiguo 13/11/2011, 07:48
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola, evidentemente tienes que declararla como un STRING ya que puede contener caracteres Alfabéticos

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #9 (permalink)  
Antiguo 14/11/2011, 11:16
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Pregunta Respuesta: Problemas con Visual Basic con Excel

Buenas erbuson, mira, despues de pensarlo un poco, la cosa quedaria asi no?

Código vb:
Ver original
  1. Sub socis2()
  2.  
  3. Dim NS, N1, N2, acumulador, x, codicontrol, xifra As Integer
  4. Dim N3, lletra As String
  5.  
  6. NS = Range("F2").Value
  7. N3 = Range("H2").Value
  8.  
  9. If NS < 1001 Then
  10.     MsgBox ("Introduce un número superior a 1001")
  11. End If
  12.  
  13.    
  14.  
  15.     N1 = Int(NS / 100)
  16.     N2 = NS - (N1 * 100)
  17.  
  18.     acumulador = 0
  19.  
  20. For x = 1 To N2 Step 1
  21.  
  22.     acumulador = acumulador + x
  23.  
  24. Next
  25.  
  26.     N2 = acumulador * N1 * 13411
  27.  
  28.     codicontrol = (N2 / 9 - Int(N2 / 9)) * 9
  29.  
  30.     xifra = (N2 / 31 - Int(N2 / 31)) * 31
  31.  
  32. If xifra < 10 Then
  33.     lletra = "A"
  34. ElseIf xifra >= 10 Or xifra < 19 Then
  35.     lletra = "B"
  36. Else
  37.     lletra = "C"
  38. End If
  39.  
  40.     Range("F3").Value = NS & Int(codicontrol) & lletra
  41.    
  42. If N3 = Int(codicontrol) & lletra Then
  43.  
  44.     Range("H3").Value = "Correcto"
  45.  
  46. Else
  47.  
  48.     Range("H3").Value = "Incorrecto"
  49.  
  50. End If
  51.  
  52. End Sub

En caso de que fuera correcto, que más podria añadirle para que estubiera más a prueba de fallos?

Cada vez me animo más con el tema :D, haber que puedo añadir :P

Grácias :D

Última edición por sven_uri; 14/11/2011 a las 11:18 Razón: Ortografia
  #10 (permalink)  
Antiguo 14/11/2011, 14:53
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola, ya que los has pedido, en base a tu ejemplo, te voy a dar un par de consejos.

En primer lugar, el código en su gran mayoría es correcto pero debe desgranarse en dos partes.

En primer lugar, deberías crear una Funcion que te devuelva el código de control correspondiente a un número de Socio, que podría ser por ejemplo algo así. Es tu código con ligeras modificaciones que te he comentado.


Código vb:
Ver original
  1. Private Function CodigoControl(CodigoBase As Integer) As String
  2.   ' Funcion reutilizable que calcula y devuelve el código de Control
  3.  Dim N1 As Integer, N2 As Integer, acumulador As Integer, x As Integer
  4.   Dim codicontrol As Integer, xifra As Integer
  5.  
  6.   N1 = Int(NS / 100)
  7.   N2 = NS - (N1 * 100)
  8.   ' o bien N2 = NS Mod 100    'Ya que Mod devuelve rel resto de una division entera
  9.  
  10.   ' acumulador = 0
  11.  ' No Hace Falta porque al hacer el DIM ya toma el Valor 0
  12.  
  13.   For x = 1 To N2 Step 1
  14.     acumulador = acumulador + x
  15.   Next
  16.  
  17.   N2 = acumulador * N1 * 13411
  18.   codicontrol = (N2 / 9 - Int(N2 / 9)) * 9
  19.   xifra = (N2 / 31 - Int(N2 / 31)) * 31
  20.  
  21.   If xifra < 10 Then
  22.     lletra = "A"
  23.   ElseIf xifra >= 10 Or xifra < 19 Then
  24.     lletra = "B"
  25.   Else
  26.     lletra = "C"
  27.   End If
  28.  
  29.   CodigoControl = codicontrol & lletra
  30.   ' No es necesario Int(codicontrol) porque ya es entero
  31. End Function

De este modo tienes un Funcion que puedes llamr desde donde te convenga ya que lo que no tiene sentido es en tu programa generar el código y verificar al mismo tiempo, cabe pensar que la idea es que cuando se asigna el código a un socio se le indica en numero nnnn?? donde ?? es el código de control que se le asigna al mismo.

Cuando en tu código indicas:

If NS < 1001 Then
MsgBox ("Introduce un número superior a 1001")
' Aqui debes salir de la Sub porque no puedes hacer el cálculo.
Exit Sub
End If

Esta funcion, en tu caso puedes llamarla de la siguiente manera:

Range("F3").Value = Range("F3").Value & CodigoControl(Range("F2").Value)

Por otra parte, se supone que cuando se introduzca en alguna celda el dato completo del socio nnnn??, debes verificar si se ha introducido correctamente de una manera mas o menos así, suponiendo que se introduzca en "H5"

NS = Left$(Range("H5").Value, 4)
IF Right$(Range("H5").Value, 2) <> CodigoControl(NS) Then
Msgbox "Numero de Socio Erróneo"
Else
Msgbox "Numero de Socio Correcto")
End If

Creo que es un poco la idea, aunque te haya destrozado algo tu código, si quieres comentar algo más, por aqui estaré.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #11 (permalink)  
Antiguo 14/11/2011, 15:30
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Hola de nuevo:

El siguiente código funciona en Excel:

Código vb:
Ver original
  1. Private Function CodigoControl(NS As Integer) As String
  2.   ' Funcion que calcula y devuelve el código de Control
  3.  Dim N1 As Double, N2 As Double, acumulador As Double, x As Integer
  4.   Dim codicontrol As Integer, xifra As Integer
  5.   N1 = Int(NS / 100)
  6.   N2 = NS Mod 100
  7.   For x = 1 To N2
  8.     acumulador = acumulador + x
  9.   Next
  10.  
  11.   N2 = acumulador * N1 * 13411
  12.   codicontrol = N2 Mod 9
  13.   xifra = N2 Mod 31
  14.  
  15.   If xifra < 10 Then
  16.     lletra = "A"
  17.   ElseIf xifra >= 10 Or xifra < 19 Then
  18.     lletra = "B"
  19.   Else
  20.     lletra = "C"
  21.   End If
  22.  
  23.   CodigoControl = codicontrol & lletra    ' No es necesario Int(codicontrol) porque ya es entero
  24. End Function
  25.  
  26. Private Sub CommandButton1_Click()
  27.   ' Asignacion del Código de Control al socio nnnn introducido en F2
  28.  If CInt(Range("F2").Value) < 1000 Then
  29.     MsgBox ("Introduce un número superior a 1000")
  30.   Else
  31.     Range("F3").Value = CodigoControl(CInt(Range("F2").Value))
  32.   End If
  33. End Sub
  34.  
  35. Private Sub CommandButton2_Click()
  36.   ' Verificacion del Valor nnnn?? introducido en H2
  37.  If CodigoControl(CInt(Left$(Range("H2").Value, 4))) = Right$(Range("H2").Value, 2) Then
  38.     Range("H3").Value = "Correcto"
  39.   Else
  40.     Range("H3").Value = "Incorrecto"
  41.   End If
  42. End Sub

Pienso que está haciendo lo que necesitas, compáralo con el tuyo para ver las diferencias piensa no obstante que en eso de la programación casi todos los caminos conducen a Roma, o sea que lo mismos resultados puedes conseguirlos de maneras similares, dependiendo de la imaginacion y enfoque de cada uno.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #12 (permalink)  
Antiguo 15/11/2011, 04:53
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Buenas erbuson! Muchas grácias por toda la info!! He estado probando tanto lo que me has puesto como lo que tenia yo. La cosa es que al profesor nose si le gustara que me avance más que mis compañeros de clase (no es ni muy simpatico ni muy razonable este profesor..)

En caso de querer hacerlo más básico, como lo ves de la siguiente manera?

Código vb:
Ver original
  1. Sub socis2()
  2.  
  3.         Dim NS, N1, N2, acumulador, x, codicontrol, xifra As Integer
  4.         Dim N3, lletra, resposta1, resposta2 As String
  5.            
  6.             If NS >= 1001 Then
  7.        
  8.                  MsgBox ("Vuelve a iniciar el programa e introduce un número superior a 1001")
  9.                  Exit Sub
  10.        
  11.             End If
  12.    
  13. Do
  14.         resposta1 = InputBox("Eres cliente del banco? (S/N):")
  15.  
  16.         If resposta1 = "N" Or resposta1 = "n" Then
  17.          
  18.             Range("F2").Value = ""
  19.             Range("F3").Value = ""
  20.             Range("I2").Value = ""
  21.             Range("I3").Value = ""
  22.                
  23.             Exit Sub
  24.        
  25.         End If
  26.        
  27.    
  28.     Do
  29.    
  30.             resposta2 = InputBox("Quieres salir del programa? (S/N):")
  31.            
  32.             If resposta2 = "S" Or resposta2 = "s" Then
  33.                
  34.                 Range("F2").Value = ""
  35.                 Range("F3").Value = ""
  36.                 Range("I2").Value = ""
  37.                 Range("I3").Value = ""
  38.                
  39.                 Exit Sub
  40.            
  41.             End If
  42.                
  43.             NS = Range("F2").Value
  44.             N3 = Range("I2").Value
  45.  
  46.              
  47.             N1 = Int(NS / 100)
  48.             N2 = NS - (N1 * 100)
  49.        
  50.             acumulador = 0
  51.        
  52.             For x = 1 To N2 Step 1
  53.            
  54.                 acumulador = acumulador + x
  55.            
  56.             Next
  57.        
  58.             N2 = acumulador * N1 * 13411
  59.  
  60.                
  61.             codicontrol = (N2 / 9 - Int(N2 / 9)) * 9
  62.        
  63.             xifra = (N2 / 31 - Int(N2 / 31)) * 31
  64.  
  65.            
  66.             If xifra < 10 Then
  67.            
  68.                 lletra = "A"
  69.                
  70.             ElseIf xifra >= 10 Or xifra < 19 Then
  71.            
  72.                 lletra = "B"
  73.                
  74.             Else
  75.            
  76.                 lletra = "C"
  77.                
  78.             End If
  79.  
  80.  
  81.        
  82.             Range("F3").Value = NS & Int(codicontrol) & lletra
  83.            
  84.  
  85.             If N3 = Int(codicontrol) & lletra Then
  86.            
  87.                 Range("I3").Value = "Correcto"
  88.            
  89.             Else
  90.            
  91.                 Range("I3").Value = "Incorrecto"
  92.            
  93.             End If
  94.            
  95.     Loop While resposta = "N" Or resposta = "n"
  96.  
  97. Loop While resposta = "S" Or resposta = "s"
  98.  
  99. End Sub

Se puede mejorar más aún de forma sencilla? (aunque sea de forma limitada).

Cómo podria hacerlo para que al apretar el botón no me borre los datos obtenidos, más que nada para que pudiera existir la posibilidad de: mi programa a realizado todo correctamente, miro mis resultados, quiero introducir un nuevo código, borrame los datos antiguos y ahora introduzco un nuevo número. Más que nada por question de "limpieza" de que cada vez que inicio el programa me borre lo que haya para introducir unos nuevos, pero al hacerlo me lo borra todo siempre y nose donde colocar los: Range("F2").Value = "" .

PD: Estoy aprendiendo más contigo que con el profesor que tengo. Muchas grácias por tu tiempo :D.
  #13 (permalink)  
Antiguo 15/11/2011, 06:37
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Por cierto, el calculo que hago para obtener "codicontrol" i "xifra" esta bien echo, no? (Lo equivalente al mod digo).
  #14 (permalink)  
Antiguo 15/11/2011, 09:41
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años
Puntos: 69
Respuesta: Problemas con Visual Basic con Excel

este tema esta repetido ¬¬ aquí
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #15 (permalink)  
Antiguo 15/11/2011, 15:34
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Cita:
Iniciado por sven_uri Ver Mensaje
Por cierto, el calculo que hago para obtener "codicontrol" i "xifra" esta bien echo, no? (Lo equivalente al mod digo).
Respondiendo a esta pregunta, después te comento respecto a la otra, pienso que estos dos cálculos aunque funcionan porque lo he probado, no se si funcionarán en todos los casos. He probado la division por 9

Te comento sobre uno de ellos como lo haría yo porque dando orden a los paréntesis. Así es como lo tienes:

codicontrol = (N2 / 9 - Int(N2 / 9)) * 9

para forzar bien las operaciones, debería estar asi:

codicontrol = N2 - (Int(N2 / 9) * 9)
ya que de esta manera obligas a que se hagan primero las operaciones que están en el interior del paréntesis que te marco en rojo

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #16 (permalink)  
Antiguo 15/11/2011, 15:58
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Contestando a la otra pregunta, te comento:

En primer lugar, creo recordar que tal como haces el DIM es incorrecto porque deben declararse explicitamente.

Dim NS, N1, N2, acumulador, x, codicontrol, xifra as Integer

En este caso sólo xifra se define como integer, ya que los demas toman el tipo Variant. (No sabría decirte si en VBA o sea Visual Basic de Excel, es igual)

Yo, por norma, las defino individualmente:

Dim NS As Integer, x As Integer, xifra As Integer, ...

Por otra parte, supongo que el trabajo está pensado para ir aprendiendo distintas opciones ya que en el caso de la pregunta:

resposta1 = InputBox("Eres cliente del banco ? (S/N):")

No tiene mucho sentido cuando la pregunta puede ser un MsgBox

If MsgBox("Eres cliente del Banco", vbYesNo) = vbNo Then Exit Sub

Si tienes que usar la comparacion de un valor albabético que puede ser mayúsculas o minúsculas, se acostumbra utilizar los convertidores de mayúsculas o Minúsculas, por ejemplo:

En este caso, ¿ que ocurriría si el usuario teclea SI ? o Teclea No

Supongamos que a una pregunta el usuario puede responder Si, SI, si o sI, como ves tendrías que comprobar 4 posibilidades mientras que se puede hacer:

If Ucase(Respuesta)="SI" Then

en este caso cualquiera de las respuestas que de el usuario del ejemplo, sería correcto ya que Ucase convierte a Mayúsculas.

Por otra parte, no tiene sentido las comparaciones While del Do/Loop ya que explicitamente efectúas un Exit Sub para salir de la rutina, por lo tanto NUNCA se va a dar la circunstancia que comparas puesto que lo habrás 'sacado fuera'

Como puedes ver, hay bastantes cosas que mejorar, quizas porque no os han enseñado las suficientes herramientas.

Por mi parte no hay inconveniente en enseñarte algo más aunque como tu bien dices, no tenemos que superar al resto porque daría que pensar.

Si conocias y podías utilizar lo que te comento, no dudes que la solución es mas adecuada.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #17 (permalink)  
Antiguo 16/11/2011, 04:36
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Cita:
Iniciado por Monimo Ver Mensaje
este tema esta repetido ¬¬ aquí
Sorry, no recordaba haberlo puesto en otra parte Monimo :(

Grácias por tu aporte.
  #18 (permalink)  
Antiguo 18/11/2011, 04:36
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problemas con Visual Basic con Excel

Al final consegui entenderlo todo y me funciona muy bien el mini programa erbuson!

Muchas grácias por todo.

Saludos!
  #19 (permalink)  
Antiguo 18/11/2011, 07:47
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Problemas con Visual Basic con Excel

Pues nada, estupendo, ya sabes por donde estoy si necesitas algun empujoncito mas.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: basic, control, excel, visual
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:49.