Preguntas sobre macros y certificados de programación

13/09/2003 - 16:53 por Juan Ignacio | Informe spam
Buenas tardes y perdón por el ladrillazo que os mando.

Un amigo mío me hizo una macro para la oficina que nos ahorra días de
trabajo, si días, pues antes lo hacíamos con funciones buscarV previa
comparación de que en los dos informes se cruzar hubiera los mismos
proveedores ya que podía haber proveedores diferentes (solo algunos) en cada
informe, en cuyo caso teníamos que poner a pedal, (cortar y pegar), el
nombre del proveedor que estuviera en un informe y no estuviera en otro y ya
solo la búsqueda de estos era una locura pues en algunos informes había mas
de 200 proveedores en un año y 240 en otro. El informe se utiliza para
comparar la actividad de un mismo periodo de dos años diferentes, por
ejemplo de enero a marzo del 2002 y mismo periodo del 2003. Es el transcurso
del tiempo pues hay proveedores que se han dado de baja y otros de alta pero
si uno se dio de alta en el segundo periodo necesito que todos los datos del
primer periodo salgan a "0" y viceversa.

Bueno, el caso es que la macro me la protegió para que no la tocaran en la
oficina con una cosa llamada "certificado del programador" yo en casa puedo
ver el código pero en la oficina nadie es capaz de verlo. Lo que yo quería
hacer ahora son algunas cosas, la principal que cada X tiempo o X usos la
macro pida una clave, supongo que lo de pensar en la clave me lo solucionara
mi cuñado que es matemático, pero lo que no se como hacer es que pida la
clave, si alguien me da una idea, aunque yo no la entienda, cuando mi amigo
vuelva se lo paso.

Otro tema, quería hacer dos macros, siempre partiendo de una hoja Excel
que llame al fichero a macrear, que me hicieran lo siguiente, una que
detectara la ultima columna que tuviera datos en alguna celda y a partir de
ahí fuera borrando todas las vacías hacia la izquierda y otra que detectara
la ultima fila con datos en alguna celda y a partir de ahí fuera hacia
arriba borrando las filas vacías. En mi empresa somos todos algo incultos,
yo con Excel me defiendo, con macros no, y el caso es que todos los informes
que antes solo salían impresos ahora salen también en Excel pero para
manejarlos es una locura, cada columna con datos tiene al lado una o dos
vacías, no se el motivo, y después tienen la puñetera manía de meter filas
vacías por medio de los informes, tampoco se el motivo, yo las borro a
pedal pero lleva mucho tiempo, después tengo que convertir el formato
personalizado fecha en numero y después en otra columna al lado volver a
ponerla como fecha, ya que en la que sale en el informe tiene unas comillas
" que impiden que pueda ordenarse, otra cosa que no entiendo. (todos esos
informes salen de una base de datos Oracle).

Si alguien ha tenido la paciencia de leer hasta aquí y aún le queda algo de
paciencia, pues agradecería ideas para los tres temas que pregunto. Hacer
que una clave salte cada X tiempo o usos (supongo que la solución para
darle la clave podría ser sumar la fecha que tenga el ordenador por ejemplo
12/05/2003 sumar todo y daría 2020 y a ese numero sumarle una constante,
ósea otro número cualquiera siempre el mismo o dividir por algún numero y
usar el entero o cualquier chorrada) el problema es hacer que la macro pida
la clave. Y después lo de las otras dos macros que podría ser una sola pero
en el cuadro de dialogo preguntar si borrar filas, columnas o ambas.

Agradezco ideas y hasta invitaría a pasteles para quien me arregle lo de la
macro fila columnas que no se por donde empezar, salvo que lo normal es
empezar de derecha a izquierda y de arriba abajo y no puedo usar una matriz
diciendo que filas o columnas borrar pues en cada informe (y tenemos mas de
70 diferentes) las filas y columnas en blanco no son las mismas.

Un saludo y disculpas por el ladrillo. ¿por cierto, alguien me puede
explicar como funciona lo del certificado de programador?

Juan Ignacio

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
15/09/2003 - 10:19 | Informe spam
Sólo como sugerencia: no es conveniente mezclar varias consultas en un solo mensaje, en especial si no tienen nada que ver entre sí, porque lo más probable es que nadie sea capaz de contestarlas a todas, tal como me sucede a mí: no tengo ni idea de lo que es el "certificado del programador". Tal vez se trate de algún tipo de certificado de los emitidos por las autoridades de certificación, algunas de las cuales (las que emiten certificados compatibles con Office) puedes verlas en:

http://msdn.microsoft.com/library/d...rtprog.asp


Sobre las macros sí puedo decirte algo.
Se supone que la hoja a la que hay que eliminar las columnas y filas vacías se llama igual en todos los libros. Si esto no fuera así, habría que habilitar alguna forma de selección de hoja.
Para quitar las columnas vacías:


Sub AbrirLibroYQuitarColumnasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim strNombreHoja As String
Dim blnExisteLaHoja As Boolean, dblFila As Integer

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)

strNombreHoja = "Hoja1" 'Nombre de la hoja que se procesará

For Each wksH In wkbL.Worksheets
If wksH.Name = strNombreHoja Then
blnExisteLaHoja = True
Exit For
End If
Next wksH

If Not blnExisteLaHoja Then
MsgBox prompt:="La hoja " & strNombreHoja & " no existe en el libro " & wkbL.Name, Buttons:=vbCritical + vbOKOnly
Exit Sub
End If

dblFila = 1
While dblFila < wksH.UsedRange.Columns.Count
If Application.WorksheetFunction.CountA(wksH.Columns(dblFila)) = 0 Then
wksH.Columns(dblFila).Delete
Else
dblFila = dblFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Y para quitar las filas vacías:


Sub AbrirLibroYQuitarFilasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim strNombreHoja As String 'Nombre de la hoja que se procesará
Dim blnExisteLaHoja As Boolean, lngFila As Long

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)

strNombreHoja = "Hoja1"

For Each wksH In wkbL.Worksheets
If wksH.Name = strNombreHoja Then
blnExisteLaHoja = True
Exit For
End If
Next wksH

If Not blnExisteLaHoja Then
MsgBox prompt:="La hoja " & strNombreHoja & " no existe en el libro " & wkbL.Name, Buttons:=vbCritical + vbOKOnly
Exit Sub
End If

lngFila = 1
While lngFila < wksH.UsedRange.Rows.Count
If Application.WorksheetFunction.CountA(wksH.Rows(lngFila)) = 0 Then
wksH.Rows(lngFila).Delete
Else
lngFila = lngFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel


"Juan Ignacio" escribió en el mensaje news:
Buenas tardes y perdón por el ladrillazo que os mando.

Un amigo mío me hizo una macro para la oficina que nos ahorra días de
trabajo, si días, pues antes lo hacíamos con funciones buscarV previa
comparación de que en los dos informes se cruzar hubiera los mismos
proveedores ya que podía haber proveedores diferentes (solo algunos) en cada
informe, en cuyo caso teníamos que poner a pedal, (cortar y pegar), el
nombre del proveedor que estuviera en un informe y no estuviera en otro y ya
solo la búsqueda de estos era una locura pues en algunos informes había mas
de 200 proveedores en un año y 240 en otro. El informe se utiliza para
comparar la actividad de un mismo periodo de dos años diferentes, por
ejemplo de enero a marzo del 2002 y mismo periodo del 2003. Es el transcurso
del tiempo pues hay proveedores que se han dado de baja y otros de alta pero
si uno se dio de alta en el segundo periodo necesito que todos los datos del
primer periodo salgan a "0" y viceversa.

Bueno, el caso es que la macro me la protegió para que no la tocaran en la
oficina con una cosa llamada "certificado del programador" yo en casa puedo
ver el código pero en la oficina nadie es capaz de verlo. Lo que yo quería
hacer ahora son algunas cosas, la principal que cada X tiempo o X usos la
macro pida una clave, supongo que lo de pensar en la clave me lo solucionara
mi cuñado que es matemático, pero lo que no se como hacer es que pida la
clave, si alguien me da una idea, aunque yo no la entienda, cuando mi amigo
vuelva se lo paso.

Otro tema, quería hacer dos macros, siempre partiendo de una hoja Excel
que llame al fichero a macrear, que me hicieran lo siguiente, una que
detectara la ultima columna que tuviera datos en alguna celda y a partir de
ahí fuera borrando todas las vacías hacia la izquierda y otra que detectara
la ultima fila con datos en alguna celda y a partir de ahí fuera hacia
arriba borrando las filas vacías. En mi empresa somos todos algo incultos,
yo con Excel me defiendo, con macros no, y el caso es que todos los informes
que antes solo salían impresos ahora salen también en Excel pero para
manejarlos es una locura, cada columna con datos tiene al lado una o dos
vacías, no se el motivo, y después tienen la puñetera manía de meter filas
vacías por medio de los informes, tampoco se el motivo, yo las borro a
pedal pero lleva mucho tiempo, después tengo que convertir el formato
personalizado fecha en numero y después en otra columna al lado volver a
ponerla como fecha, ya que en la que sale en el informe tiene unas comillas
" que impiden que pueda ordenarse, otra cosa que no entiendo. (todos esos
informes salen de una base de datos Oracle).

Si alguien ha tenido la paciencia de leer hasta aquí y aún le queda algo de
paciencia, pues agradecería ideas para los tres temas que pregunto. Hacer
que una clave salte cada X tiempo o usos (supongo que la solución para
darle la clave podría ser sumar la fecha que tenga el ordenador por ejemplo
12/05/2003 sumar todo y daría 2020 y a ese numero sumarle una constante,
ósea otro número cualquiera siempre el mismo o dividir por algún numero y
usar el entero o cualquier chorrada) el problema es hacer que la macro pida
la clave. Y después lo de las otras dos macros que podría ser una sola pero
en el cuadro de dialogo preguntar si borrar filas, columnas o ambas.

Agradezco ideas y hasta invitaría a pasteles para quien me arregle lo de la
macro fila columnas que no se por donde empezar, salvo que lo normal es
empezar de derecha a izquierda y de arriba abajo y no puedo usar una matriz
diciendo que filas o columnas borrar pues en cada informe (y tenemos mas de
70 diferentes) las filas y columnas en blanco no son las mismas.

Un saludo y disculpas por el ladrillo. ¿por cierto, alguien me puede
explicar como funciona lo del certificado de programador?

Juan Ignacio



Respuesta Responder a este mensaje
#2 el agonías
16/09/2003 - 19:50 | Informe spam
"Fernando Arroyo" escribió en el mensaje
news:
Sólo como sugerencia: no es conveniente mezclar varias consultas en un solo
mensaje, en especial si no tienen nada que ver entre sí, porque lo más
probable es que nadie sea capaz de contestarlas a todas, tal como me sucede
a mí: no tengo ni idea de lo que es el "certificado del programador". Tal
vez se trate de algún tipo de certificado de los emitidos por las
autoridades de certificación, algunas de las cuales (las que emiten
certificados compatibles con Office) puedes verlas en:

http://msdn.microsoft.com/library/d...rtprog.asp


Muchas gracias y tienes razón, cada tema en su hilo la mezcolanza solo es
buena para algunos vinos.

Sobré lo que me comentas de la hoja a limpiar te puedo decir que será única
siempre en cada libro, por lo cual al abrir el libro solo encontrará una
hoja y tendrá que convertirla en activa, aún no me estudie el código pero
este fin de semana lo haré y documentaré pues a falta de tiempo para
estudiar el visual prefiero documentar lo que voy teniendo explicando que
hace cada cosa, no es un buen sistema pero algo queda y así se puede uno
atrever a toquetear cosas en el futuro.

Nuevamente muchas gracias

Juan Ignacio
Respuesta Responder a este mensaje
#3 Fernando Arroyo
17/09/2003 - 11:30 | Informe spam
Si es seguro que los libros tienen únicamente una hoja, es posible "reducir" el código:

Sub AbrirLibroYQuitarColumnasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim dblFila As Integer

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)
Set wksH = wkbL.Worksheets(1)

dblFila = 1
While dblFila < wksH.UsedRange.Columns.Count
If Application.WorksheetFunction.CountA(wksH.Columns(dblFila)) = 0 Then
wksH.Columns(dblFila).Delete
Else
dblFila = dblFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Sub AbrirLibroYQuitarFilasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim lngFila As Long

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)
Set wksH = wkbL.Worksheets(1)

lngFila = 1
While lngFila < wksH.UsedRange.Rows.Count
If Application.WorksheetFunction.CountA(wksH.Rows(lngFila)) = 0 Then
wksH.Rows(lngFila).Delete
Else
lngFila = lngFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel

"el agonías" escribió en el mensaje news:64I9b.2208$

"Fernando Arroyo" escribió en el mensaje
news:
Sólo como sugerencia: no es conveniente mezclar varias consultas en un solo
mensaje, en especial si no tienen nada que ver entre sí, porque lo más
probable es que nadie sea capaz de contestarlas a todas, tal como me sucede
a mí: no tengo ni idea de lo que es el "certificado del programador". Tal
vez se trate de algún tipo de certificado de los emitidos por las
autoridades de certificación, algunas de las cuales (las que emiten
certificados compatibles con Office) puedes verlas en:

http://msdn.microsoft.com/library/d...rtprog.asp


Muchas gracias y tienes razón, cada tema en su hilo la mezcolanza solo es
buena para algunos vinos.

Sobré lo que me comentas de la hoja a limpiar te puedo decir que será única
siempre en cada libro, por lo cual al abrir el libro solo encontrará una
hoja y tendrá que convertirla en activa, aún no me estudie el código pero
este fin de semana lo haré y documentaré pues a falta de tiempo para
estudiar el visual prefiero documentar lo que voy teniendo explicando que
hace cada cosa, no es un buen sistema pero algo queda y así se puede uno
atrever a toquetear cosas en el futuro.

Nuevamente muchas gracias

Juan Ignacio


Respuesta Responder a este mensaje
#4 el agonías
17/09/2003 - 15:02 | Informe spam
Nuevamente gracias y no se que le pasa a este correo anterior, salio con el
nick de mi hijo mayor, que utiliza a veces este ordenador pero tiene su
cuenta en el bat no en el O.E. que es el que uso yo con lo cual no entiendo
nada y tengo ganas de ver que pasa a este correo y como sale, me parece a mi
que ya necesita esto un formateo, con tres hijos que tienen que probar sus
cosas aquí en vez de en sus dos ordenadores con el cuento de la memoria y
otros que mejor no cuento al final el que parece no tener ordenador soy yo,
pues hasta el de dos años tiene un juego aquí y me machaca el ratón :o((


Nuevamente muchísimas gracias


Juan Ignacio (que no el inconsciente de su hijo mayor)


"Fernando Arroyo" escribió en el mensaje
news:
Si es seguro que los libros tienen únicamente una hoja, es posible "reducir"
el código:

Sub AbrirLibroYQuitarColumnasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim dblFila As Integer

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft
Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)
Set wksH = wkbL.Worksheets(1)

dblFila = 1
While dblFila < wksH.UsedRange.Columns.Count
If Application.WorksheetFunction.CountA(wksH.Columns(dblFila)) = 0
Then
wksH.Columns(dblFila).Delete
Else
dblFila = dblFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Sub AbrirLibroYQuitarFilasVacías()
Dim wkbL As Workbook, wksH As Worksheet
Dim strLibro As String
Dim lngFila As Long

ChDir ("C:\") 'Directorio donde están los libros
strLibro = Application.GetOpenFilename(filefilter:="Libros de Microsoft
Excel (*.xls),*.xls", Title:="Seleccionar libro a procesar")
Set wkbL = Workbooks.Open(strLibro)
Set wksH = wkbL.Worksheets(1)

lngFila = 1
While lngFila < wksH.UsedRange.Rows.Count
If Application.WorksheetFunction.CountA(wksH.Rows(lngFila)) = 0 Then
wksH.Rows(lngFila).Delete
Else
lngFila = lngFila + 1
End If
Wend

Set wkbL = Nothing
Set wksH = Nothing
End Sub


Un saludo.


Fernando Arroyo
MS MVP - Excel

"el agonías" escribió en el mensaje
news:64I9b.2208$

"Fernando Arroyo" escribió en el mensaje
news:
Sólo como sugerencia: no es conveniente mezclar varias consultas en un


solo
mensaje, en especial si no tienen nada que ver entre sí, porque lo más
probable es que nadie sea capaz de contestarlas a todas, tal como me


sucede
a mí: no tengo ni idea de lo que es el "certificado del programador". Tal
vez se trate de algún tipo de certificado de los emitidos por las
autoridades de certificación, algunas de las cuales (las que emiten
certificados compatibles con Office) puedes verlas en:




http://msdn.microsoft.com/library/d...rtprog.asp


Muchas gracias y tienes razón, cada tema en su hilo la mezcolanza solo es
buena para algunos vinos.

Sobré lo que me comentas de la hoja a limpiar te puedo decir que será


única
siempre en cada libro, por lo cual al abrir el libro solo encontrará una
hoja y tendrá que convertirla en activa, aún no me estudie el código pero
este fin de semana lo haré y documentaré pues a falta de tiempo para
estudiar el visual prefiero documentar lo que voy teniendo explicando que
hace cada cosa, no es un buen sistema pero algo queda y así se puede uno
atrever a toquetear cosas en el futuro.

Nuevamente muchas gracias

Juan Ignacio


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida