Excel y VB 6.0 (Checkbox)

Iniciado por Enemy, 9 Abril 2013, 20:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Enemy

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 (vb) [Seleccionar]


Private Sub Boton1_Click()

Dim Excel As Object
Dim ArchivoExcel As Object
Dim Unidades As String
Dim AL As Integer
Dim AM As Integer
Dim AN As Integer

AL = 38
AM = 39
AN = 40

Unidades = "C:\Original\Unidades.slk"

Set Excel = CreateObject("Excel.Application")
Excel.Visible = False
Set ArchivoExcel = Excel.Workbooks.Open(Unidades)

ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"

ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
ArchivoExcel.Close SaveChanges:=False
Set ArchivoExcel = Nothing
Excel.Quit
Set Excel = Nothing
MsgBox "El color de las unidades ha sido correjido", vbOKOnly, "Listo!"
End Sub



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 (vb) [Seleccionar]


Dim Excel As Object
Dim ArchivoExcel As Object
Dim Unidades As String
Dim C As Integer

C = 3

Unidades= "C:\Original\Unidades.slk"

Set Excel = CreateObject("Excel.Application")
Excel.Visible = False
Set ArchivoExcel = Excel.Workbooks.Open(Unidades)

ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"

ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
ArchivoExcel.Close SaveChanges:=False
Set ArchivoExcel = Nothing
Excel.Quit
Set Excel = Nothing
MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"
End Sub



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.

Enemy

125 visitas, 0 respuestas.. ok

MCKSys Argentina

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 (vb) [Seleccionar]

Private Sub Boton1_Click()

Boton2_Click
Boton3_Click
Boton4_Click
Boton5_Click

End Sub


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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


ignorantev1.1

¿Será esto?  :huh:

Código (vb) [Seleccionar]
Dim Excel As Object
Dim ArchivoExcel As Object
Dim Unidades As String
Dim C As Integer
Dim Cambios as String '<---------
C = 3

Unidades= "C:\Original\Unidades.slk"

Set Excel = CreateObject("Excel.Application")
Excel.Visible = False
Set ArchivoExcel = Excel.Workbooks.Open(Unidades)

if  CorrejirRuta.Value = 1 then 'CheckBox "corregir Ruta"
    ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"
    Cambios=Cambios & "La ruta de las unidades blablabla" & vbcrlf '<--- Rejistra los cambios
end if

if  CambiarColor.Value = 1 then  'CheckBox "Cambiar color"
    ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"
    Cambios=Cambios & "El color de las unidades blablabla" & vbcrlf
end if

if  HacerOtraCosa.Value = 1 then  'CheckBox "Hacer otra cosa"
    ArchivoExcel.OtraCosa("HACER OTRA COSA")
    Cambios=Cambios & "Se hizo otra cosa blablabla" & vbcrlf
end if

ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
ArchivoExcel.Close SaveChanges:=False
Set ArchivoExcel = Nothing
Excel.Quit
Set Excel = Nothing
' MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"  <------- NO!
Msgbox "Cambios efectuados: " & vbcrlf & Cambios '<---- Presenta los cambios de jalón



¡Saludos! (Al menos lo intenté)

Enemy

#4
Cita de: ignorantev1.1 en 10 Abril 2013, 06:57 AM
¿Será esto?  :huh:

Código (vb) [Seleccionar]
Dim Excel As Object
Dim ArchivoExcel As Object
Dim Unidades As String
Dim C As Integer
Dim Cambios as String '<---------
C = 3

Unidades= "C:\Original\Unidades.slk"

Set Excel = CreateObject("Excel.Application")
Excel.Visible = False
Set ArchivoExcel = Excel.Workbooks.Open(Unidades)

if  CorrejirRuta.Value = 1 then 'CheckBox "corregir Ruta"
   ArchivoExcel.Worksheets("PestañaUnidades").Cells(475, C) = "units\Custom\blabla\payaso.mdx"
   Cambios=Cambios & "La ruta de las unidades blablabla" & vbcrlf '<--- Rejistra los cambios
end if

if  CambiarColor.Value = 1 then  'CheckBox "Cambiar color"
   ArchivoExcel.Worksheets("PestañaUnidades").Cells(250, AL) = "HOLA"
   Cambios=Cambios & "El color de las unidades blablabla" & vbcrlf
end if

if  HacerOtraCosa.Value = 1 then  'CheckBox "Hacer otra cosa"
   ArchivoExcel.OtraCosa("HACER OTRA COSA")
   Cambios=Cambios & "Se hizo otra cosa blablabla" & vbcrlf
end if

ArchivoExcel.SaveAs "C:\Patch\Unidades.slk"
ArchivoExcel.Close SaveChanges:=False
Set ArchivoExcel = Nothing
Excel.Quit
Set Excel = Nothing
' MsgBox "La ruta de las unidades han sido correjidas", vbOKOnly, "Listo!"  <------- NO!
Msgbox "Cambios efectuados: " & vbcrlf & Cambios '<---- Presenta los cambios de jalón



¡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.

ignorantev1.1

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 (vb) [Seleccionar]

If CorrejirRuta.Value = 0 and CambiarColor.Value = 0 and HacerOtraCosa.Value = 0 Then '<--- Y así hasta el fin del mundo.
    Exit sub
end if


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

Código (vb) [Seleccionar]

Dim Bandera as boolean
Dim i as integer

While Not Bandera and i < Opcion.Count 'Asumiendo que "Opcion" sea el nombre de las "Checkbox".
   Bandera = (Opcion(i).Checked = 1) 'Si hay alguna "CheckBox" marcada se vuelve "True"
   i=i+1
wend

if Not Bandera then exit sub

'Blablabla


Saludos.

Enemy

#6
naah... podes creer que estaba haciendo esto mira:

Código (vb) [Seleccionar]
If Check1.value = 0 & Check2.value = 0 & Check3.value = 0 & Check4.value = 0 & Check5.value = 0 then
MsgBox "There is no changes to apply!", vbCritical, "Did you pick an option first?"
Exit sub
End if


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:


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.