Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Enemy en 9 Abril 2013, 20:23 pm



Título: Excel y VB 6.0 (Checkbox)
Publicado por: Enemy en 9 Abril 2013, 20:23 pm
Buenas gente, me gustaria saber si podrian darme una mano con un temita de VB.

Estoy trabajando con un archivo .SLK de excel el cual tiene una base de datos y lo que hago es remplazar el texto de ciertas celdas, guardar y salir.

Es un parche lo que estoy haciendo y como mi programa tiene varias opciones y cosas para parchar, doy la opcion de que parchar y que no, queria poner un checkbox para marcar que es lo que van a parchar (modificar ese archivo de excel).

Mi idea principal era tener un boton para cada funcion pero ese mismo archivo no se deja guardar asi nomas, si o si tengo que usar la funcion "SaveAs" de excel en otra carpeta con el mismo nombre en este caso "patch" y hay que apretar boton por boton para parchar todo y hace todo lo mismo una y otra vez. Como puedo hacer para que el usuario tilde las opciones y que luego al apretar un solo boton que dira "Parchar" se produzcan los cambios que arme por separado?

No se si me explique bien, aca dejo un ejemplo de lo que tengo:

Código
  1.  
  2. Private Sub Boton1_Click()
  3.  
  4. Dim Excel As Object
  5. Dim ArchivoExcel As Object
  6. Dim Unidades As String
  7. Dim AL As Integer
  8. Dim AM As Integer
  9. Dim AN As Integer
  10.  
  11. AL = 38
  12. AM = 39
  13. AN = 40
  14.  
  15. Unidades = "C:\Original\Unidades.slk"
  16.  
  17. Set Excel = CreateObject("Excel.Application")
  18. Excel.Visible = False
  19. Set ArchivoExcel = Excel.Workbooks.Open(Unidades)
  20.  
  21. ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"
  22.  
  23. ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
  24. ArchivoExcel.Close SaveChanges:=False
  25. Set ArchivoExcel = Nothing
  26. Excel.Quit
  27. Set Excel = Nothing
  28. MsgBox "El color de las unidades ha sido correjido", vbOKOnly, "Listo!"
  29. End Sub
  30.  
  31.  

Lo que hace ese boton es cambiarle el color a ciertas unidades, el otro boton corrije rutas de otras unidades ajenas a estos.

Estoy usando esa ruta (C:/etc) porque aun esta en fase de desarrollo pero usare App.path y demas.

Y en otro boton tengo al distinto:

Código
  1.  
  2. Dim Excel As Object
  3. Dim ArchivoExcel As Object
  4. Dim Unidades As String
  5. Dim C As Integer
  6.  
  7. C = 3
  8.  
  9. Unidades= "C:\Original\Unidades.slk"
  10.  
  11. Set Excel = CreateObject("Excel.Application")
  12. Excel.Visible = False
  13. Set ArchivoExcel = Excel.Workbooks.Open(Unidades)
  14.  
  15. ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"
  16.  
  17. ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
  18. ArchivoExcel.Close SaveChanges:=False
  19. Set ArchivoExcel = Nothing
  20. Excel.Quit
  21. Set Excel = Nothing
  22. MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"
  23. End Sub
  24.  
  25.  

Los codes fueron modificados para un mejor entendimiento, son mas completos, esta todo en ingles y etc

E iran mas opcioes de parchado.. Como ven, cada boton hace algo diferente sobre el mismo archivo, entonces, como hago para poner todo esto en cada opcion del checkbox sin tener que abrir y guardar de formas diferentes el mismo archivo? me gustaria usar algo como:

Marcar opciones, apretar boton parchar, se abre archivo, se modifica contenido segun opciones elejidas, se guarda en ruta personalizada, se cierra excel, Msgbox avisando que fue parchado con exito, fin de programa.

Por cada vez que aprieto un boton, copia el original a la carpeta patch y trabaja con ese archivo, por lo tanto si yo apretara un boton, luego el otro, este sustituiria al anterior y seria un parche distinto, remplazando lo parchado anterior mente, ya que trabaja con la copia del original. Podria trabajar tambien con el anteriormente parchado pero habria que dejarlo en oootra ruta diferente porque recuerden que este no se deja guardar asi mismo sino es "Guardar Como" y no puedo andar agregando montones de carpetas por cada boton que tenga.. y seran alrededor de 5 botones.

Espero haberme explicado lo suficiente.

Que puedo hacer en este caso? ojala reciba la ayuda que espero, gracias de antemano.

Pd: Ya extrañaba este foro.


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: Enemy en 10 Abril 2013, 04:53 am
125 visitas, 0 respuestas.. ok


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: MCKSys Argentina en 10 Abril 2013, 06:32 am
Creo que no te entendí bien, pero te tiro ideas a ver si "le pego":

1) Cuando defines eventos para controles (botones incluídos) defines una sub, la cual puede ser llamada desde otra sub/función.

Osea, puedes tener algo como:

Código
  1. Private Sub Boton1_Click()
  2.  
  3. Boton2_Click
  4. Boton3_Click
  5. Boton4_Click
  6. Boton5_Click
  7.  
  8. End Sub
  9.  

Lo que sería idéntico a hacerle click a cada botón secuencialmente.

2) No entendí muy bien lo que sigue, pero: si cada botón hace cambios en la planilla y después guarda la misma: No sería mejor hacer todos los cambios juntos y guardar 1 sola vez? Necesitas guardar por cada cambio realizado? O podrias "recordar" los cambios pedidos y después, en un momento determinado, aplicar los cambios pedidos y guardar?

Saludos!


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: ignorantev1.1 en 10 Abril 2013, 06:57 am
¿Será esto?  :huh:

Código
  1. Dim Excel As Object
  2. Dim ArchivoExcel As Object
  3. Dim Unidades As String
  4. Dim C As Integer
  5. Dim Cambios as String '<---------
  6. C = 3
  7.  
  8. Unidades= "C:\Original\Unidades.slk"
  9.  
  10. Set Excel = CreateObject("Excel.Application")
  11. Excel.Visible = False
  12. Set ArchivoExcel = Excel.Workbooks.Open(Unidades)
  13.  
  14. if  CorrejirRuta.Value = 1 then 'CheckBox "corregir Ruta"
  15.    ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"
  16.    Cambios=Cambios & "La ruta de las unidades blablabla" & vbcrlf '<--- Rejistra los cambios
  17. end if
  18.  
  19. if  CambiarColor.Value = 1 then  'CheckBox "Cambiar color"
  20.    ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"
  21.    Cambios=Cambios & "El color de las unidades blablabla" & vbcrlf
  22. end if
  23.  
  24. if  HacerOtraCosa.Value = 1 then  'CheckBox "Hacer otra cosa"
  25.    ArchivoExcel.OtraCosa("HACER OTRA COSA")
  26.    Cambios=Cambios & "Se hizo otra cosa blablabla" & vbcrlf
  27. end if
  28.  
  29. ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
  30. ArchivoExcel.Close SaveChanges:=False
  31. Set ArchivoExcel = Nothing
  32. Excel.Quit
  33. Set Excel = Nothing
  34. ' MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"  <------- NO!
  35. Msgbox "Cambios efectuados: " & vbcrlf & Cambios '<---- Presenta los cambios de jalón
  36.  
  37.  

¡Saludos! (Al menos lo intenté)


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: Enemy en 10 Abril 2013, 14:33 pm
¿Será esto?  :huh:

Código
  1. Dim Excel As Object
  2. Dim ArchivoExcel As Object
  3. Dim Unidades As String
  4. Dim C As Integer
  5. Dim Cambios as String '<---------
  6. C = 3
  7.  
  8. Unidades= "C:\Original\Unidades.slk"
  9.  
  10. Set Excel = CreateObject("Excel.Application")
  11. Excel.Visible = False
  12. Set ArchivoExcel = Excel.Workbooks.Open(Unidades)
  13.  
  14. if  CorrejirRuta.Value = 1 then 'CheckBox "corregir Ruta"
  15.    ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"
  16.    Cambios=Cambios & "La ruta de las unidades blablabla" & vbcrlf '<--- Rejistra los cambios
  17. end if
  18.  
  19. if  CambiarColor.Value = 1 then  'CheckBox "Cambiar color"
  20.    ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"
  21.    Cambios=Cambios & "El color de las unidades blablabla" & vbcrlf
  22. end if
  23.  
  24. if  HacerOtraCosa.Value = 1 then  'CheckBox "Hacer otra cosa"
  25.    ArchivoExcel.OtraCosa("HACER OTRA COSA")
  26.    Cambios=Cambios & "Se hizo otra cosa blablabla" & vbcrlf
  27. end if
  28.  
  29. ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
  30. ArchivoExcel.Close SaveChanges:=False
  31. Set ArchivoExcel = Nothing
  32. Excel.Quit
  33. Set Excel = Nothing
  34. ' MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"  <------- NO!
  35. Msgbox "Cambios efectuados: " & vbcrlf & Cambios '<---- Presenta los cambios de jalón
  36.  
  37.  

¡Saludos! (Al menos lo intenté)


Claaaro exacto, ese mismo uso del checkbox queria saber, muchas gracias ignorantev1.1 con esto ya termino (creo) el parche.

- Con esto solo me quedaria que hacer en caso de no tildar ninguna opcion.  :huh: Porque si presiono el boton, abre el archivo, lo guarda asi como esta y lo cierra y el msj de los cambios efectuados me sale vacio. Ya probe con Do while, con desabilitarlo hasta, etc etc, pero no pego una sola. Alguna idea?

Gracias a ambos.


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: ignorantev1.1 en 10 Abril 2013, 18:26 pm
Citar
- Con esto solo me quedaria que hacer en caso de no tildar ninguna opcion.   Porque si presiono el boton, abre el archivo, lo guarda asi como esta y lo cierra y el msj de los cambios efectuados me sale vacio. Ya probe con Do while, con desabilitarlo hasta, etc etc, pero no pego una sola. Alguna idea?

Código
  1. If CorrejirRuta.Value = 0 and CambiarColor.Value = 0 and HacerOtraCosa.Value = 0 Then '<--- Y así hasta el fin del mundo.
  2.    Exit sub
  3. end if
  4.  

O si utilizaras una matriz de controles para las "CheckBox":

Código
  1. Dim Bandera as boolean
  2. Dim i as integer
  3.  
  4. While Not Bandera and i < Opcion.Count 'Asumiendo que "Opcion" sea el nombre de las "Checkbox".
  5.   Bandera = (Opcion(i).Checked = 1) 'Si hay alguna "CheckBox" marcada se vuelve "True"
  6.   i=i+1
  7. wend
  8.  
  9. if Not Bandera then exit sub
  10.  
  11. 'Blablabla
  12.  

Saludos.


Título: Re: Excel y VB 6.0 (Checkbox)
Publicado por: Enemy en 11 Abril 2013, 05:15 am
naah... podes creer que estaba haciendo esto mira:

Código
  1. If Check1.value = 0 & Check2.value = 0 & Check3.value = 0 & Check4.value = 0 & Check5.value = 0 then
  2. MsgBox "There is no changes to apply!", vbCritical, "Did you pick an option first?"
  3. Exit sub
  4. End if
  5.  

Y hasta que vi que usaste "And" en vez de "&", me di cuenta que me la estaba mandando en colores todo el tiempo. No me merezco menos que esto:

(http://narwhaler.com/img/bh/c/mandril-monkey-facepalm-bHCJzK.jpg)

Muchisimas gracias Ignorantev1.1, aparte de ayudarme, me hiciste darme cuenta por la pavada que no me salia una simpe condicion.

Espero que no te moleste que te agregue a los creditos.