Visual Basic.NET - Duda sobre Visual Basic

 
Vista:

Duda sobre Visual Basic

Publicado por SweeTy (12 intervenciones) el 01/02/2010 14:16:59
Buenos Dias,

Estoy creando una aplicacion que tiene dos funciones diferentes.
Por una parte tengo 5 textbox y 2 listbox.

Necesitaria que, si yo pongo en el textbox1 el valor 21 y en el textbox2 el valor 4 en el listbox me sacara un listado del 2100 hasta el 2199 por ejemplo.

Pero por otra parte tengo otros 3 textbox y otro listbox, y la idea es que si en el textbox3 pongo el valor 8 en el textbox4 pongo 4 y en e textbox5 pongo 8448 me muestre en el listbox1 una lista del del 80 al 89 saltandose el 84 continue del 840 al 849 saltandose el 844 y del 8440 al 8448 esta vez sin saltarse nada.

Tenia, por un compañero que se fue, un excel con una macro, pero al estar en un equipo con politicas no pudimos cambiar la seguridad de las macros, y segun el "informatico" la macro que se utilizaba comprometia a la estabilidad de los equipos.

Por lo que nos borró los dos excel y estamos algo perdidos con todo esto.

Si alguien pudiese ayudarnos, lo agradeceriamos.
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:Duda sobre Visual Basic

Publicado por SweeTy (12 intervenciones) el 08/03/2010 11:33:14
Buenos Dias,

He conseguido acceder al codigo de la macro de Excel que realiza lo que comentaba. Veo que se sirve de celdas para hacer los calculos necesarios.
Por ejemplo en el primer caso nos encotramos con que la macro hace lo siguiente:

Range("F2").Select
ActiveCell.FormulaR1C1 = "=R2C3-LEN(R2C2)"
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[2]=4,RC[-2]*10000,IF(RC[2]=3,RC[-2]*1000,IF(RC[2]=2,RC[-2]*100,IF(RC[2]=1,RC[-2]*10,""Algo has hecho mal""))))"

Range("E2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[1]=4,RC[-1]+9999,IF(RC[1]=3,RC[-1]+999,IF(RC[1]=2,RC[-1]+99,IF(RC[1]=1,RC[-1]+9,""Algo has hecho mal""))))"

Range("B4").Select

While ActiveCell.Value <> ""
Range("B2").Value = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
Range("C2").Value = ActiveCell.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Casilla = ActiveCell.Address
Range("A4").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("A1").Select

Wend
ActiveCell.Value = Range("D2").Value
fin = ActiveCell.Value
While fin <> Range("E2").Value
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R[-1]C+1"
fin = ActiveCell.Value
Wend
Range(Casilla).Select
Wend
Range("b2:f2").Clear
End If
End Sub

La historia es que yo pensaba en que cambiando las partes en la que hace referencia a las celdas, por el textbox que sustituyen a esas celdas, podria darle ese valor a un boton. Pero al haber formulas, no entiendo como deberia hacerlo o si hay alguna opcion para que los calculos que hacen esas celdas con formulas se puedan hacer en "Segundo plano", o quizas deberia plantear otra manera el programa.

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:Duda sobre Visual Basic

Publicado por SweeTy (12 intervenciones) el 08/03/2010 11:33:27
Buenos Dias,

He conseguido acceder al codigo de la macro de Excel que realiza lo que comentaba. Veo que se sirve de celdas para hacer los calculos necesarios.
Por ejemplo en el primer caso nos encotramos con que la macro hace lo siguiente:

Range("F2").Select
ActiveCell.FormulaR1C1 = "=R2C3-LEN(R2C2)"
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[2]=4,RC[-2]*10000,IF(RC[2]=3,RC[-2]*1000,IF(RC[2]=2,RC[-2]*100,IF(RC[2]=1,RC[-2]*10,""Algo has hecho mal""))))"

Range("E2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[1]=4,RC[-1]+9999,IF(RC[1]=3,RC[-1]+999,IF(RC[1]=2,RC[-1]+99,IF(RC[1]=1,RC[-1]+9,""Algo has hecho mal""))))"

Range("B4").Select

While ActiveCell.Value <> ""
Range("B2").Value = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
Range("C2").Value = ActiveCell.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Casilla = ActiveCell.Address
Range("A4").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("A1").Select

Wend
ActiveCell.Value = Range("D2").Value
fin = ActiveCell.Value
While fin <> Range("E2").Value
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R[-1]C+1"
fin = ActiveCell.Value
Wend
Range(Casilla).Select
Wend
Range("b2:f2").Clear
End If
End Sub

La historia es que yo pensaba en que cambiando las partes en la que hace referencia a las celdas, por el textbox que sustituyen a esas celdas, podria darle ese valor a un boton. Pero al haber formulas, no entiendo como deberia hacerlo o si hay alguna opcion para que los calculos que hacen esas celdas con formulas se puedan hacer en "Segundo plano", o quizas deberia plantear otra manera el programa.

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:Duda sobre Visual Basic

Publicado por SweeTy (12 intervenciones) el 08/03/2010 15:33:47
Buenos dias he realizado lo siguiente, he creado la siguiente funcion la cual de un error en el "End Function"

Function plus(ByVal valor)

Select Case valor

Case 2 : Return 10
Case 3 : Return 100
Case 4 : Return 1000
Case 5 : Return 10000
Case 6 : Return 100000
Case 7 : Return 1000000
Case 8 : Return 10000000
Case 9 : Return 100000000

End Select

End Function

Y el error que da es este:
"La Funcion 'plus' no devuelve un valor en todas las rutas de acceso de codigo. Podria darse una excepcion de referencia nula en tiempo de ejecucion cuando se utilice el resultado."

Luego en el boton he puesto lo siguiente

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim total As Integer

total = plus(TextBox2.Text)

ListBox1.Text = ("texbox1.text" * total)

End Sub

Para que en principio haga el calculo, ahora lo que falta es que realmente haga el calculo, y luego que en el listbox1 aparezca en la primera linea por ejemplo

texbox1 es igual 5
y el texbox2 es 2

en el listbox1 aparezca
50 (que seria 5*10)
51
52
53
54
55
56
57
58
59

Y justo en el 59 deje de contar porque entra en el 60.
y que en el caso de que el textbox2 fuese un 3 seria

500 (de 5*100)
501
502
503
... hasta
599
y el 600 ya no lo hiciera.

O que si le pongo en el textbox1 56 y en el textbox2 3 fuese
560 (de 56*10)
y luego hasta
569
y el 570 ya no hiciera nada porque no esta en rango solicitado.

Gracias por toda la ayuda que pueda recibir.
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