Problema con boton de formulario y control ActiveX

23/10/2009 - 22:55 por Jorge | Informe spam
Hola. Quisiera ayuda con el siguiente problema: tengo dos macros: una me
imprime determinadas partes de una hoja y otra me archiva determinados
rangos. Ambas fueron creadas por Hector Miguel, según hilos de fecha 1/9/09
"Macro para imprimir rangos" y 18/8/09 "Archivar solo ciertos registros". Lo
que hice fue crear un boton de comando ActiveX y junte las dos macros
quedando asi:
Private Sub CommandButton1_Click()

ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

Dim Fila As Integer, Salto As Byte, Grupo As Byte, Registros As Byte, _
Datos, Fecha, modCalc
Salto = 42
Grupo = 28
With Application
.ScreenUpdating = False
modCalc = .Calculation
.Calculation = xlCalculationManual
With Worksheets("estado diario")
Fecha = .Range("f4")
For Fila = 10 To .Range("c65536").End(xlUp).Row Step Salto
With .Range("c" & Fila).Resize(Grupo)
Registros = Evaluate("count('" & .Parent.Name & "'!" & .Address &
")")
If Registros > 0 Then
Datos = .Resize(Registros).Value
With Worksheets("historico").Range("a65536").End(xlUp).Offset(1)
.Resize(Registros).Value = Fecha
.Offset(, 1).Resize(Registros).Value = Datos
End With
End If
End With
Next
End With
.Calculation = modCalc
End With
End Sub

Al hacer click en el comando, funciona perfectamente, es decir, me imprime
solo las "hojas" que contienen datos y guarda los datos existentes, pero el
problema que es que el comando ActiveX tiene pocas posibilidades de diseñarlo
en cuanto a su imagen, razón por la cual, cree un boton con la Ficha
Insertar, rectangulo, cuadro de texto y le di colores, etc. Luego, en la
ficha Programador, Modo Diseño, click sobre el boton, Ver Código, copie esa
macro, pero solo me imprime y no guarda los datos. ¿Como lo soluciono o debo
quedarme con el Boton ActiveX?
Otra cosa ¿como se hace para que se habilite esta macro, sin necesidad que
me pregunte cada vez que inicio el Libro respectivo? Probe con archivar como
libro habilitado para macros, pero me crea otros problemas. Gracias de
antemano.-

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
24/10/2009 - 03:07 | Informe spam
hola, Jorge !

1) si el codigo que expones, NO es (exactamente) tal y como queda despues de "copiado" al nuevo objeto incrustado...
(probablemente) "algo" de lo que no esta funcionando, tampoco ha quedado expuesto en esta consulta (?)
(en que tipo de modulo ?, cuales son las instrucciones exactas ?, ???)

2) al control activex (commandbutton1) le puedes establecer diversas propiedades (imagenes, colores, etc.)
(probablemente no sea necesario buscar alternativas por otro tipo de objetos ?)

3) en la version 2007, si quieres que el libro tenga macros, deberas guardarlo como "libro habilitado para macros" (*.xlsm)
o guardarlo con compatibilidad para versiones 97-2003 (pierdes las caracteristicas nuevas a 2007)

4) y no... (hasta donde se) no hay forma de evitar que excel "pregunte" si habilitas las macros (son opciones de cada usuario)

saludos,
hector.

__ OP __
Mostrar la cita
#2 Jorge
24/10/2009 - 18:14 | Informe spam
Hola Hector Miguel. Como siempre, gracias. Te cuento en primer lugar que si
guardo el archivo en Excel 2007 con Habilitado para macros, deja de funcionar
la conversión de números a letras (columna d de la hoja que subí hace algún
tiempo atras), lo que no sucede con archivo para Excel en modo
compatibilidad. Claro que a su vez al guardar en este último formato, me
arroja un mensaje indicando que existen datos fuera de los limites de celdas
y columas, marcando de amarillo, las celdas donde supuestamente existe el
error.Estas marcas solo ocurren a partir de mi "hoja" 2, y alternadas, es
decir, filas 52, 54, 56, etc. Estoy absolutamente seguro de que no existen
datos que excedan el número de columnas ni filas.-
En segundo lugar, en cuanto al tipo de modulo e instrucciones exactas, dada
mi ignorancia en el tema, tratare de explicarte en mis palabras, que quizas
no correspondan a lo tecnico: si voy a la ficha Programador, selecciono modo
diseño, y hago click en Ver Código, me muestra "todos" los códigos que tengo
en mis tres botones, es decir, para imprimir y guardar; solo imprimir y solo
guardar, mas el código del boton que cree y que en realidad es el que trato
de reemplazar, copiando el de imprimir y guardar. Para mas claridad, los
copio todos a continuación:
Private Sub CommandButton1_Click()

ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

Dim Fila As Integer, Salto As Byte, Grupo As Byte, Registros As Byte, _
Datos, Fecha, modCalc
Salto = 42
Grupo = 28
With Application
.ScreenUpdating = False
modCalc = .Calculation
.Calculation = xlCalculationManual
With Worksheets("estado diario")
Fecha = .Range("f4")
For Fila = 10 To .Range("c65536").End(xlUp).Row Step Salto
With .Range("c" & Fila).Resize(Grupo)
Registros = Evaluate("count('" & .Parent.Name & "'!" & .Address &
")")
If Registros > 0 Then
Datos = .Resize(Registros).Value
With Worksheets("historico").Range("a65536").End(xlUp).Offset(1)
.Resize(Registros).Value = Fecha
.Offset(, 1).Resize(Registros).Value = Datos
End With
End If
End With
Next
End With
.Calculation = modCalc
End With
End Sub

Private Sub CommandButton2_Click()
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End Sub

Private Sub CommandButton3_Click()
Dim Fila As Integer, Salto As Byte, Grupo As Byte, Registros As Byte, _
Datos, Fecha, modCalc
Salto = 42
Grupo = 28
With Application
.ScreenUpdating = False
modCalc = .Calculation
.Calculation = xlCalculationManual
With Worksheets("estado diario")
Fecha = .Range("f4")
For Fila = 10 To .Range("c65536").End(xlUp).Row Step Salto
With .Range("c" & Fila).Resize(Grupo)
Registros = Evaluate("count('" & .Parent.Name & "'!" & .Address &
")")
If Registros > 0 Then
Datos = .Resize(Registros).Value
With Worksheets("historico").Range("a65536").End(xlUp).Offset(1)
.Resize(Registros).Value = Fecha
.Offset(, 1).Resize(Registros).Value = Datos
End With
End If
End With
Next
End With
.Calculation = modCalc
End With
End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Solo existen dos modulos: modulo1 para imprimir y moduloparaarchivar datos

Finalmente, es cierto que los controles activex tienen algunas propiedades,
pero al parecer no permiten caracteristicas como biselado, sombra, color
metalico, degradado, etc. Ahora, si se pudiera "usar" la "imagen" del boton
creado y pegarla en el control activex, sería la solución, pero ¿como se
hace?. Gracias y disculpa la lata. Saludos

"Héctor Miguel" escribió:

Mostrar la cita
#3 Héctor Miguel
24/10/2009 - 23:10 | Informe spam
hola, Jorge ! (creo que te refieres al libro "Publicacion.xls" no ?)

__ 1 __
Mostrar la cita
1) esto sucede porque la version 2007 tiene mas filas y columnas que las versiones anteriores y (de algun modo)...
las celdas a las que se hace referencia en los nombres definidos tambien (de algun modo) resultan desplazadas :-((
y es facil de corregir siguiendo este procedimiento "al pie de la letra" (luego de abrir la version 2007 y habilitar las macros)

a) selecciona la celda [D10] de la hoja "Estado Diario"
b) de la cinta de opciones / (ficha) formulas / (boton) administrador de nombres... -> selecciona el nombre "_A" (sin las comillas)
c) (RE)define en la formula la referencia, que debe quedar "apuntando" a la misma fila de una columna anterior, o sea a: [C10]
d) toma buena nota de que la referencia debe ser RELATIVA e iniciando con el signo ' ! '
la formula debiera quedar +/- asi: -> =texto(!c10,"000000000000000.00")&repetir("",0*hoy())

__ 2 __
Mostrar la cita
2) a tu archivo "original", convertido primero a la version 2007, le corri algunas pruebas y note comportamientos "bizarros" (p.e.)
a) NO permite la modificacion de los nombres desde la hoja "EnLetraSINMacrosV2"
b) la navegacion funciona como si estuviera habilitada la compatibilidad de teclas para lotus-123
c) tambien "avanza" despues del enter a la celda de abajo (aun cuando NO esta habilitada esta caracteristica)
-> es probable que (por alguna razon) "ese" archivo hubiera alcanzado un "cierto grado de corrupcion" (???)

__ 3 __
Mostrar la cita
3) en cuanto a las macros, aun convertido a la version 2007 (tu archivo "original"), la macro sugerida funciona como se espera

__ 4 __
Mostrar la cita
4) puedes asignar imagenes a tus botones de comando (activex) con el siguiente procedimiento:
a) primero incrusta la imagen en alguna hoja de calculo (*.jpg, *.png, *.bmp, etc.)
b) copia la imagen incrustada en la hoja de calculo (ctrl + C)
c) cambia al editor de vba, activa el modo de diseno y selecciona la hoja y el commandbutton correspondiente
d) en la ventana de propiedades (del commandbutton), selecciona la propiedad "Picture" y haces un pegado norma: ctrl + V
-> despues puedes eliminar la imagen de la hoja y modificar otras propiedades del boton como PicturePosition, BackStyle, etc.

saludos,
hector.
#4 Jorge
27/10/2009 - 23:21 | Informe spam
Hola Hector Miguel: Si, me referia a ese libro. 1.- Corregido, gracias a tus
instrucciones. 2.- Realmente no se lo que pasa, pero en mi PC si tengo
habilitado avanzar a la celda de abajo, despues de Enter y respecto de las
letras a) y b), al parecer no tiene importancia porque ya archive en el modo
de habilitado para macros y no arroja el problema; 3 y 4.- Como la macro me
funcionaba de acuerdo a lo esperado y logre poner la imagen en el control
activex, quedó solucionado.
Tengo una duda con las macros de los controles Private Sub
CommandButton1_Click(); Private Sub CommandButton2_Click() y Private Sub
CommandButton3_Click(), que envie el día 24 de octubre, que consiste en lo
siguiente: defini un nombre (Datos) que selecciona los ya sabidos rangos
C10:C37;C52:C79; etc de la Hoja Estado Diario. Luego cree una macro que
consiste en seleccionar "Datos"; luego suprimir y finalmente, ubica el cursor
o selecciona como celda activa C10. Esta es la macro creada:
Sub Suprimir()
'
' Salir Macro
'
' Acceso directo: CTRL+s
'
Application.Goto Reference:="Datos"
Selection.ClearContents
Range("C10").Select
End Sub

Funciona como se espera, siempre que no "salga" de la columna C, pero si le
doy click a cualquiera de los controles Private Sub CommandButton1_Click();
Private Sub CommandButton2_Click() y Private Sub CommandButton3_Click() y
luego Ctrl+s, no funciona. Para solucionarlo, intente agregando al Código de
ComandButton 1, despues de FALSE) " y antes de END SUB, lo siguiente
Range("C10").Select con la intención de volver el cursor a la celda c10 o
seleccionar la celda C10. Lo mismo hice en ComandButton2, pero entre las
expresiones END WITH y END SUB. Evidentemente, algo esta mal ¿Como se logra
volver a la celda C10, despues de dar la instrucción de imprimir y guardar
para poder usar la macro suprimir? Gracias



"Héctor Miguel" escribió:

Mostrar la cita
#5 Héctor Miguel
28/10/2009 - 05:07 | Informe spam
hola, Jorge !

op1: asegurate (en tiempo de diseno) que la propiedad "TakeFocusOnClick" de los commandbuttons este en => False

op2: no es necesario "Select(ionar)" objetos para administrar sus propiedades
prueba cambiando las instruciones en la macro Suprimir()
a una sola linea (p.e.) => Range("datos").ClearContents

saludos,
hector.

__ OP __
Mostrar la cita
Ads by Google
Search Busqueda sugerida