Buenas tardes:
Estoy desarrollando un Cuadro de Mando en Excel . Me gustaría me echaran una mano en los siguientes temas:
1) En algunas opciones, no consigo evitar el 'parpadeo' de Excel , ya he probado co 'Application.ScreenUpdating = False', pero no hay forma.
Por si vale de ayuda llamo a la macro desde una imagen, pero esta imagen está igualmetne en otras hojas y no existe tal parpadeo.
Seguro debe existir alguna otra fórmula para evitar tal contratiempo.
2) Quisiera saber los registros de Excel en sus versiones 9 a 15 para quitar el bloqueo de seguridad para Macros, de forma que cuando un usuario instale
el paquete en su ordenador no tenga que (primero) activar las macros y (segundo) ejecutarlo.
Bueno, por ser mi primera vez, no sé si me he pasao'.
De cualquier forma agradecería alguna ayuda al respecto.
Vayan mis 'gracias' por adelantado.
Hola,
Raro. Prueba también a añadir Application.Calculation = xlManual al inicio de la macroy al final Application.Calculation = xlAutomatic al final de la macro, que mal no te hará, y evitará demoras recalculando alguna UDF tuya o alguna fórmula compleja en la hoja.
Si lo anterior no funciona, considera entonces que ayudaría que enviaras algo del archivo... (no tienes porqué enviar todas las macros, ni todo el archivo, sólo donde veas que hace cosas raras).
Respecto a lo del registro... ¿¿¿¿¿estás seguro de que quieres modificar el registro del usuario?????.


En caso de que se vaya a instalar en un ordenador de una empresa: ¿¿¿¿Realmente crees que el técnico Administrador del sistema permitirá esto????. ¿¿El antivirus tendrá algo que decir??
Vía macro, puedes intentar alguna solución para que se ejecuten otras macros, pero la macro que lo hace tiene que estar en ejecución previamente (o sea, que alguien la haya aprobado).
Yo lo hago así, pero sin más explicaciones a mi Google me tira que es un virus, por cosas como esta y por otras que modifican macros a través de macros, y de hecho no puedo mandar directamente mis macros a través de Gmail, tengo que comprimirlas con clave.
También puedes tratar de crear un certificado y así permitir registrar las macros para que no le pida la confirmación al usuario para tus macros (como le ocurre a la macro EuroTool.XLA que viene por defecto), estableciendo previamente la seguridad en MEDIA.
¿Cómo se hace eso? ---> Me has pillado, nunca lo he hecho, pero estoy tentado
: http://office.microsoft.com/en-us/excel-help/digitally-sign-a-macro-project-HA001231781.aspx?CTT=5&origin=HP010096919
Saludos.
Y por lo que más quieras, evita modificar cosas en el ordenador del usuario. Y menos, que sean en el registro
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Bueno, yo lo he probado (WInXP-SP3 / MSOffice2003), y funciona, pero no me hago responsable de las consecuencias que se deriven de su puesta en práctica:
Avisado quedas...
Guarda lo subrayado en un archivo .REG
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Excel\Security]
"Level"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security]
"Level"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"Level"=dword:00000001
Por cómo está expuesto aquí, ya te imaginarás cómo tienes que hacer para otras versiones...
Parece que también esto tendría relevancia en según qué versión:
[HKEY_CURRENT_USER\Software\Microsoft\Office\XXXXXXXXX\Excel\Security\VBAWarnings]
http://technet.microsoft.com/en-us/library/cc178946(v=office.12).aspx
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Buenos días:
Ante todo gracias por la prontitud y exactitud de respuesta a mi pregunta, provaré con las dos sugerencias a ver que pasa.
Efectivamente le tengo puesto 'application.Calculation = xlManual' y automático al terminar, parece ser que el 'parpadero'
se produce cuando hago un :
Range("E283:U310").Select
Selection.Copy
Range("E2:U29").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
En ésta última instrucción ' PasteSpecial ' es donde se produce el 'parpadeo'.
Quizá lo pueda sustituir para que haga el mismo efecto de otra forma, pero seguro me costará más tiempo y ralentizará el programa.
Por cierto deja seleccionadas las celdas últimas ' "E2:U29" ' y tengo que seleccionar una nueva celda para que el efecto de marcado selección se vaya,
también he probado con ' Application.CutCopyMode = False ' , pero nada.
En cuanto a las claves de window , no conozco lo de la firma digital, pero no quiero seguir molestando. Previamente lo advertiré para que el usuario
tenga plena conciencia de lo que va a hacer e igualmente advertiré de las influencia del antivirus en cuestión.
Si después de comprobar cuanto hemos escrito no logro arreglarlo le enviaré una copia comprimida, por si tuviera otro arreglo, de acuerdo?
Mil gracias por su tiempo , de cualquier forma (y si no molesto mucho), dejaré la solución (cuando la tenga) en su web, por si puede serle útil a un tercero.
Un cordial saludo
Eso mismo, que quedaría reducido a esto, ¿te produce el mismo efecto?:
With ActiveSheet
.Range("E283:U310").Copy
.Paste Destination:=.Range("E2:U29")
End With
¿Hay muchas fórmulas "complejas" en ese rango "E283:U310"?, porque si no, no lo entiendo.
Respecto a lo del marcado, es indiferente. Siempre habrá que seleccionar un rango activo.
No es molestar. A quien puede que sí moleste sea al usuario de tu programa, o al informático que se encargue de su mantenimiento.
Un saludo
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Buenas tardes:
Tal y como quedé en mi anterior pregunta, adjunto 'Libro1.xls' y 'Libro2.xls', con el primero trabajo con ' Copy - Paste ', tal y como haces referencia en tu última respuesta (si nos podemos tutear) y en el segundo inmovilizo la primera fila y solo muestro al usuario la información que desea , habiéndola previamente escrito en la parte de inferior de la hoja.En cambio en el primer libro (donde trabajo con ' copy - paste ' , sigue apareciendo el famoso parpadeo, creo que lo podreis observar, es un fastidio porque igualmente tendré que modificar algunas rutinas que tienen algo parecido al efecto del que hablamos. Si podeis echarles un vistazo ..
Con estos libros queda contestada tu última pregunta. Es una rutina que lee de la base de datos y estampa en la hoja de excel las cantidades para después mostrarlas al usuario en el orden que éste estime conveniente. No me quiero enrollar mucho en la forma de operar ya que creo queda claro en las hojas de cada libro.
Con respecto al certificado para registar las marcos, os agradecería alguna explicación al respecto o algún link donde poder dirigirme, vale?
Dejo los libros abiertos y libres por si considerais pudieran enriquecer el foro (sé que no es mucho ), o ayudar a alguien que pudiera tener el mismo problema o que simplemente quiera mostrar datos en un mapa. Seguro se pueden encajar mejor.
De cualquier forma estoy agradecido por vuestro tiempo por lo que si considerais pudiera ayudaros en algo o algún tipo de colaboración no dudeis en decirlo, vale?
Por mi parte no dudaré en aportar aquello que pueda considerar útil o seguir preguntando.
Un cordial saludo y de nuevo Gracias.
Muy curioso, me ha gustado la idea. Me quedo con ganas de ver qué otras cosas podrían ocurrirse. Aunque lo del libro1, de pinchar en el icono y que muestre algún resultado, una tabla, un informe... uhmmm, qué ideas se me pasan por la cabeza.
Yo lo haría de otra forma:
- prescindiría del Scroll, que al final es lo que produce el parpadeo.
- Crearía un único mapa, y en una hoja independiente, guardaría los datos brutos.
- Crearía referencias a cada Provincia de la forma:
With ActiveWorkbook.Names
.Add Name:="P15", RefersToR1C1:="=Mapa_Mudo!RxCw" 'A Coruña
With ActiveWorkbook.Names
.Add Name:="D15", RefersToR1C1:="=Mapa_Mudo!RyCz" 'A Coruña
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Es un trabajo de 'chinos' pero podría mejorarse así.
Luego os comento como quedó al final.
Una cosa, acuérdate de enviarme un sitio donde dirigirme para el certificado de macros, vale?
Un saludo
"SI valor = h cambiar a
formato Widwings y color, Si valor = i cambiar a formato widwings y otro..."
No puedo cambiar el formato de letra en función al valor, únicamente puedo cambiar el tipo y color de fuente.
Puede ser así?
Es menos trabajo de chinos del que comentas. El trabajo de chinos es hacerlo como lo estás haciendo ahora, que para mostrar un mapa o dos es más rápido, pero cuando comiences a mostrar más mapas (tres o cuatro), pierdes "de goleada". XDD
Respecto a los de los certificados, creo que en uno de los enlaces (concretamente el de Microsoft) está explicado el proceso entero. Pero nunca lo he intentado más allá de hacer unas pruebas...
Lo de cambiar el formato de texto... tienes razón, con formato condicional no se puede. No se me ocurrió porque no suelo recurrir al formato condicional, prefiero hacerlo vía macro directamente.
Si me has hecho caso, ;) , las referencias ya estarían creadas (según mi modelo) y sería muchísimo más fácil de esa forma.
Te adjunto un ejemplo para que pruebes y veas cómo funciona lo de las referencias...
Option Explicit
Sub CreadorReferencias()
'Creamos 57 nombres de referencias (por comodidad las creo en la columna 1, pero es un ejemplo)
Dim intContador As Integer
Dim strContador As String
Dim lgFila As Long
Dim lgColumna As Long
Dim strNombreHoja As String
Dim strNombreReferencia As String
strNombreHoja = "HojaXXX" 'Cambiar el nombre de la hoja según necesidad
lgColumna = 1 'Las creo en la columna 1
For lgFila = 1 To 57
strContador = VBA.Format(lgFila, "00")
ActiveWorkbook.Names.Add Name:="Dato" & strContador, _
RefersToR1C1:="=" & strNombreHoja & "!" & _
"R" & lgFila & "C" & lgColumna
'Asigno valores a cada uno de las referencias
strNombreReferencia = "Dato" & strContador
Application.Range(strNombreReferencia).Value = "Menganito" & lgFila
Next lgFila
End Sub
Sub ListaReferencias()
'Crea una lista de las referencias del libro...
Dim intContador As Integer
Dim Referencia As Excel.Name
'For intContador = 1 To 300000
intContador = 1
On Error Resume Next 'Evita fallos si has creado y eliminado referencias... esto es una salvaguarda
For Each Referencia In ActiveWorkbook.Names
ActiveSheet.Cells(intContador, 2).Value = Referencia.Index
ActiveSheet.Cells(intContador, 3).Value = Referencia.Name
ActiveSheet.Cells(intContador, 4).Value = "'" & Referencia.RefersToR1C1 'Dirección del rango de la Referencia en formato R1C1
ActiveSheet.Cells(intContador, 5).Value = "'" & Referencia.RefersToLocal 'Direccion del rango de la Referencia en formato A1
intContador = intContador + 1
Next Referencia
On Error GoTo 0
End Sub
'Ahora lo fácil, una vez creadas las referencias, todo viene a pedir de boca... las cosas las puedes llamar por su nombre, directamente
Sub CambiarTipoFuente()
'Cambiamos el tipo de fuente en la referencia de nombre "Dato01"
'para este ejemplo, celda A1, de la HojaXXX
Dim rgRango As Excel.Range
Dim strNombreReferencia As String
strNombreReferencia = "Dato01"
Set rgRango = Names(strNombreReferencia).RefersToRange
rgRango.Font.Name = "Wingdings"
Set rgRango = Nothing
End Sub
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Buenas tardes:
Al final la solución quedó así:
=INDICE(MapaClientes!$A$100:$T$156;15;$A$1)
donde:
'MapaClientes' es la hoja en la que están los datos.
'$A$100:$T$156' es la selección de datos que me interesan.
'15' es el código postal de la provincia en cuestión ( en este caso A CORUÑA )
'$A$1 es la columna que me interesa muestre.
Así cuando el usuario pincha "Tendencia", el valor de A1 toma 2, que es la columna donde está este dato, cuando 'Frecuencia' A1 toma 3.... etc.
Lógico es, previamente he insertado en la situación de cada provincia ( fila y columna ) esta fórmula (no de forma manual), se puede hacer con macro.
Pero........... sigue apareciendo el 'parpadeo' y aunque no entra dentro de mis costumbres lo he dejado por imposible.
El caso es que si omito ScreenUpdating = False no se provoca este efecto, pero claro está se ve pasar el cursor por cada rango.
En fin otro desconocimiento con el que uno se irá al otro lado.
Si se os ocurre algo.... de cualquier forma , espero esto sirva para otra gente con igual incertidumbre.
Un saludo , gracias por vuestra atención y hasta otra.
Respecto a lo de instalar las macros y que se ejecuten sin preguntar, se deberían llevar a la zona de Editores de confianza:
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Alguien lo preguntó, pues es posible escribir a registro en sitios en los que no se debería:
http://www.technicana.com/excel-programming/219.html
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Y ya puestos, por aquí también se mencionó lo de crear un certificado digital, así se hace (consultar los dos enlaces que aparecen para más información):
Cargar la XLL sin recibir el aviso 'There is no digital signature available'.
Esta información y mucha más, traducida de: http://www.technicana.com/excel-programming.html
Excel mostrará un diálogo de aviso cada vez que quiera cargar una XLL no firmada. Pulsar en 'Enable this add-in for this session only' (permitir ejecutar el Add-in sólo en esta sesión) puede ser cansino después de un tiempo, especialmente cuando es una XLL que se carga frecuentemente.
Importante: - La seguridad en Windows es un tema extenso y muy importante. Consulta con un profesional antes de hacer cualquier cambio en la configuración de seguridad.
Los primeros pasos serán crear un certificado. Hay información en creación de certificados en MSDN (http://msdn.microsoft.com/en-us/library/bfsktky3(VS.80).aspx). Pueden usarse los siguientes comandos:
makecert -r -pe -n "CN=MENGANITO" -b 01/01/2005 -e 01/01/2010 -sky exchange -ss my
El siguiente paso es firmar el archivo binario con el certificado. Si usa el siguiente comando con el interruptor /a, busca el certificado "más" adecuado. Puede encontrar más información en la página de SingTool de MSDN (http://msdn.microsoft.com/en-us/library/8s9b9yaz(VS.80).aspx)
signtool sign /a ARCHIVO.exe
(también valdría para archivos DLL, XLL)
Una vez que la XLL está firmada, ejecuta 'certmgr' para acceder al gestor de certificados. Deberías encontrar el certificado en la primera pestaña. Exporta el certificado como archivo ".cer", luego vaya a la pestaña Trusted Publishers (Editores de confianza) y re-importa el certificado allí.
Mientras no hayas establecido una configuración de seguridad en Excel muy rigurosa, cuando se cargue la XLL, Excel la reconocerá ahora como proveniente de un Editor de Confianza (Trusted Publisher) y la cargará sin preguntar al usuario.
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Este es un hilo viejo y más que cerrado, pero al no poder contestarte de otra forma, lo enlazo aquí.
Navegando por la red me encontré con esta forma de cortar y pegar... y recordé este hilo y el problema pendiente.
Habla de un parpadeo al copiar y pegar (igual que te pasaba a ti)... con esto lo solucionan.
http://excelexperts.com/copy-values-vba
Un saludo. Espero que esto te llegue al email, y todavía sea de utilidad.
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Muchas gracias, por eso de que "nunca es tarde ...."