UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se puede subir archivos al foro, favor de hacerlo en servidor externo (Dropbox, Drive...) y dejan link. "Sin archivo no hay respuestas"

Favor de leer "Todos los temas" Click aquí.

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1 La macro dejo de funcionar el 02/12/18, 09:35 pm

RAMONET6466


Disculparme que vuelva a solicitar vuestra ayuda pero la macro dejo de funcionar.
La he repasado de arriba abajo y no entiendo porque dejo de funcionar.
no he modificado ningun dato del libro.
Supongo que debo abrir este hilo para intentar solucionar el problema.
Lo unico que he podido comprobar es que solo funcionan las dos primeras filas de la macro
El resto no las contempla.
La macro se llama pasa_datos
La hoja donde estan los datos se llama PLANTILLA
Las filas son desde la B21 a la B28
Cuando se ponen los valores y darle al boton GUARDAR, esos valores deberian ir a la hoja de cada hoja de los nombres de la columna I
Si rellenas todos los valores de cada una de las filas, funciona bien, pero si rellenas los valores de una unica fila como por ejemplo la de Lidl. ya no funciona y solo pasa el dato de la fecha a la Hoja de Pepsico
Para ver las hojas de esos valores podeis clikar en los botones que corresponden de la botonera que veis en el recuadro azul, donde estan todos.
No encuentro explicacion alguna.
Gracias por vuestra ayuda
Archivo: 
https://www.dropbox.com/s/e6hyxwma9bxocoi/Modulo%20Gestion%20Drop.xlsm?dl=0

2 Re: La macro dejo de funcionar el 02/12/18, 10:49 pm

Igtelo

avatar
Hola Ramón

Una forma sencilla es ordenando los datos, cambia la macro anterior por la del código, lo que hace: Siempre en el rango B21:B28 pone consecutivamente lo que tenga no. de factura. Te lo dejo explicado en el código.
Código:
Sub Pasa_Datos()
'Para todas las hojas que contenga el libro

Application.ScreenUpdating = False
[A21] = 1                      'En A21 pone 1
[A21].AutoFill [A21:A28], 2    'Rellena consecutivo (1,2,3...hasta el
[A21:I28].Sort [B21], 1        'Ordena el rango A21:I28 en base a B21, ascendente

'Pasa datos
fecha = Range("D2").Value
c = WorksheetFunction.CountA([b21:b28])  'Cuenta cantidad de facturas que existen columna B

For w = 21 To 20 + c            'Bucle, avanza de 1 en 1
   prov = Cells(w, 9).Value   'Variable para obtener nombre de proveedor ***EN BASE A LA COLUMNA AUXILIAR***
With Sheets(prov)
  .[I33].End(xlUp).Offset(1) = fecha           'Fecha
  .[A33].End(xlUp).Offset(1) = Cells(w, 2)  'Factura
  .[B33].End(xlUp).Offset(1) = Cells(w, 4)   'Iva 4%
  .[C33].End(xlUp).Offset(1) = Cells(w, 5)   'Iva 10%
  .[D33].End(xlUp).Offset(1) = Cells(w, 6)  'Iva 21%
End With
Next

[A21:I28].Sort [A21], 1   'Ordena datos a su orden original
[A21:A28].ClearContents   'Borra el consecutivo de columna A

Application.ScreenUpdating = True
End Sub

Ejecútala por pasos (tecla F8) para que veas lo que hace, sino sabes como, te dejo éste tutorial:

http://www.universoexcelforo.com/t1181-como-trabaja-una-macro-y-la-hoja-de-calculo-simultaneamente-videotutorial


Saludos
Ignacio Téllez

3 Re: La macro dejo de funcionar el 03/12/18, 02:31 pm

RAMONET6466


Hola Ignacio:
En primer lugar agradecerte tu ayuda.
He corregido la macro con tus indicaciones y ahora funciona correctamente, tambien he realizado pruebas para saber encontrar una logica, de lo contrario no aprendo a solucionar los problemas por mi mismo.
Realizando pruebas he visto que cuando protejo la hoja me da error y deduzco que como hay una instruccion que borra el consecutivo de la columna A, si tengo la hoja protejida me da error. 
He intentado solucionarlo dosbloqueando las celdas, pero no es la solucion, continua dandome error y el miedo que tengo es que algun dia alguien ponga datos en las celdas que tienen formulas y me destroce todo el libro.
Si Vd. lo quiere comprobar con el ultimo archivo que deje en este hilo, vera que modificando la macro, funciona perfectamente, pero si proteje la hoja deja de funcionar y da error.
Voy a ver si encuentro en San Google alguna instrucion que pueda añadir a la macro para solucionar ese inconveniente.
Si no lo encuentro, seguro que Vd. me lo indicara en su respuesta a este hilo.

4 Re: La macro dejo de funcionar el 03/12/18, 10:55 pm

Igtelo

avatar
Hola Ramón.

Veo que le "echas ganas" al asunto y eso me agrada. Sigue investigando lo de la protección, tú puedes.

Me tomé la libertad de modificar casi todo tu desarrollo de proyecto, son muchísimos módulos y sólo se hace uno "bolas".
Sólo quedan 3 módulos, revisa todos, también dentro de VBA lado izquierdo donde están los nombres de hoja, busca la hoja 49(PLANTILLA) allí encuentras la macro por evento (doble click) que hace trabajar la selección de hojas.

En todas tus hojas elimina el botón volver, con lo que hice ya no se necesita y aquí fue donde quite el bonche de módulos que tenías.

Continúa usando el grabador de macros, pero ejecuta todas tus macros por pasos y así podrás ir depurando los códigos.

https://www.dropbox.com/s/296fzjkma8da69n/Igtelo-Ramonet-Control.xlsm?dl=0


Te oriento:
Cuando usamos el grabador de macros, éste siempre primero selecciona y después ejecuta la instrucción, pero el select sale sobrando.

Ejemplo1:
Así lo hace el grabador:
Range("A4:I4").select
Selection.clearcontents

Es mejor hacerlo directo:
Range("A4:I4").clearcontents
Te ahorras una línea de código.

Ejemplo 2:
Para cuando quieres borrar 2 rangos no adyacentes, la coma separa los rangos.
Range("A4:I4,J6:M6").clearcontents

Ejemplo3:
Para cuando es en determinada hoja:
Sheets("PEPSICO").Range("A4:I4,J6:M6").clearcontents
Puedes poner los rangos que necesites pero siempre separados por la coma.


Con estos ejemplos puedes depurar tus códigos y ya no te quedan larguísimos.



Saludos
Ignacio Téllez

5 Re: La macro dejo de funcionar el 04/12/18, 03:33 pm

RAMONET6466


Mil Gracias Profesor Ignacio, he ejecutado toda la macro y va perfecta, ademas estoy super contento porque he encontrado la formula para poder introducir datos en las hojas protegidas y que las macros funcionen perfectamente.
Ahora intentare analizar esta instrucción para entender su significado y el porque. 
La instrucion es esta:
With Sheets("Hoja1")
.Protect Password:="xxx", UserInterfaceOnly:=True
.EnableOutlining = True
End With
en donde pone "hoja1" solo tengo que cambiarlo por el nombre de la pagina donde se ejetuta la macro y esa orden ponerla al inicio de cada macro que tenga que utilizar esa opcion.
Mi problema es que no se ingles y me cuesta encontrar el significado de las formulas.
Ya me queda menos para finalizar el automatismo de todo el libro.
Intente utilizar tu aporte de guardar pdf con fecha, el cual esta en un hilo de este foro y solo se me guarda en el escritorio, estoy investigando para que lo guarde un una carpeta especifica, la ruta no la veo en ninguna parte de la hoja que hay de muestra.
Cuando consiga esto solo me faltara crear la macro de enviar mail directamente desde excel y libro acabado.
A ver si consigo estas dos cuestiones.
Muy agradecido por tu ayuda Ignacio.
Pd: 
Si crees que puedo aportar este libro y colgarlo en la seccion de aportes, solo tienes que autorizarme y lo cuelgo para uso de cualquier usuario que lo pueda necesitar

6 Re: La macro dejo de funcionar el 04/12/18, 07:46 pm

Igtelo

avatar
Muy Bien Ramón!!

Te aconsejo uses la ayuda de VBA (tecla F1) estando dentro de VBA, es el camino más corto y efectivo para aprender, te dejo enlace donde explico como hacerlo:

http://www.universoexcelforo.com/t1461-encontrar-ayuda-en-vba-p-nuestras-macros-videotutorial

Para lo protección que quieres una forma sencilla y te sirve para todo el libro es:Lado izquierdo de VBA donde dice ThisWorkbook copia y pega el siguiente código

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ActiveSheet.Name = "PLANTILLA" Then Exit Sub   'Si la hoja activa es PLANTILLA sale de la macro (No la protege)
With ActiveSheet
.Protect Password:="xxx", UserInterfaceOnly:=True
.EnableOutlining = True
End With
End Sub

Lo que hace ésta macro es proteger cualquier hoja cuando la activas o te pasas a ella menos la llamada PLANTILLA.
Para que entiendas que significa el UserInterfaceOnly y el EnableOutlining ve el video que te dejé al principio.


Sobre lo del PDF, sólo pon tu archivo dentro de una carpeta y listo, la macro hace todo, no necesitas dar la ruta.

Por supuesto que tu archivo es bienvenido, a muchos nos servirá, por favor de forma corta explica contenido de el y como funciona. Gracias.

Saludos
Ignacio Téllez

7 Re: La macro dejo de funcionar el 05/12/18, 03:38 pm

RAMONET6466


Sobre lo del PDF, sólo pon tu archivo dentro de una carpeta y listo, la macro hace todo, no necesitas dar la ruta............
Hola Ignacio, 
Te refieres a crear una carpeta en escritorio o dentro de Mis Documentos y copiar o pegar el archivo?
Cuando decía la ruta, es porque la que utiliza la macro, guarda por defecto el archivo en la carpeta Mis Descargas o según como lo guarda en Escritorio.
Yo tengo una macro para guardar PDF que le asigno la ruta en una celda oculta y la macro me guarda el archivo o documento en la carpeta que le indico en esa ruta, pero en el nombre tengo el problema que al ser fecha, no me acepta el valor date.
He intentado hacer lo mismo con tu macro pero no funciona.
Continuare investigando lo que tu acabas de decirme, a ver si consigo adaptarlo.
Mi macro es esta:
Celdas ocultas:
Nombre: fila 1 columna 10  Valor copiado de una fecha y pegado en formato general:143435

Ruta: fila 2 Columna 10:  C:\Users\disti\Desktop\Documents\Hojas de caja R\2018\11.NOVIEMBRE
Mi Macro:
Sub GUARDARPDF()
nombre = Cells(1, 10).Value
ruta = Cells(2, 10).Value     
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ruta & nombre, Quality:= _
    xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

End Sub
______________________________________________________________


Tu macro:
Sub Pdf()
'Guarda hoja activa como pdf con nombre de fecha y hora actual.
ruta = ThisWorkbook.Path & "\"  'Con ésta instrucción encuentra la ruta del archivo
nombre = WorksheetFunction.Text(Now(), "dd-mmm-yyyy--hh-mm")  'Es el nombre con el que guarda el 'archivo: Fecha, hora y minutos
MsgBox "RUTA DE ESTE ARCHIVO: " & ruta, vbOKOnly  'Antes de guardar nos manda un mensaje indicando la ruta   'Sino quieren el aviso, eliminen ésta línea
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ruta & nombre, OpenAfterPublish:=1  ' Sino quieren que se abra el archivo cuando 'ya lo guardó: Cambiar el 1 por 0.                                                                 '1 es lo mismo que True y 0 es lo mismo que False                                                           'Pueden usar número o palabra, a su gusto

End Sub
De tu macro la ruta que no entiendo es la que te he subrayado con negrita

8 Re: La macro dejo de funcionar el 08/12/18, 05:22 pm

Igtelo

avatar
Hola Ramón.

Sólo te puedo decir: ¿Para qué crees que te dejé el link de cómo encontrar la ayuda?!! Además en la macro la explicación es bastante clara...

Saludos
Ignacio Téllez

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.