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 pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

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

Invitado


Invitado
Buenas tardes, estoy tratando de hacer otra macro para grabar en el otro libro, Pegar y en la fila 3,
en las celdas que están en rojo, pero no se como hacerlo. La macro que estoy usando, me va fenomenal para la misma hoja, pero no consigo los parámetros para el otro libro Pegar
Un saludo
Archivos
Macro.zip
(23 KB)

tyno


Hola Luis.
Aunque no me quedaron muy en claro tus archivos te paso un código para que agregues a un boton. Este código pasa las celdas de la columna G del libro Copiar  cuyo color de fuente es rojo a la columna G del libro Pegar:

On Error Resume Next
With Workbooks("Pegar.xls").Sheets("Hoja2")
For a = 7 To Range("g65536").End(xlUp).Row
If Cells(a, 7).Font.ColorIndex = 3 Then
rw = .Range("g2:g65536").Find("").Row
.Cells(rw, 7) = Cells(a, 7)
End If
Next a
End With 

Ambos libros tienen que estar abiertos.

Saludos

Invitado


Invitado
Hola tyno, buenas noches.
Llevo una semana intentándolo y ya di con el error que me da, pero ni idea para solucionarlo, te explico.
La macro es esta y me da error en el rojo :
 
Sub GuardaLibro()
Application.ScreenUpdating = False
'copiamos el rango seleccionado
Range("D8:H8").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open "G:\Factura\Factura.xls"
Sheets("ORTIGOSACLIENTES").Select
Range("C3").Select
'Nos posicionamos en la última fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'se repite el ciclo
Wend
filalibre = ActiveCell.Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'desactivamos el modo Copiar
Application.CutCopyMode = False
'Guardamos el libro y salimos
ActiveWorkbook.Save
Workbooks("Factura.xls").Close
Application.ScreenUpdating = True
End Sub
 
Pero si le quito en, ThisWorkbook, en el libro donde tengo que grabarlo que se llama Factura :
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call DeletePopUp
End Sub
Private Sub Workbook_BeforeClosePROVEDORES(Cancel As Boolean)
    Call DeletePopUpPROVEDORES
End Sub
 
me funciona perfectamente.

Un saludo

tyno


Luis, aunque no me doy cuenta como estas diseñado tu archivo, pero se me ocurre que esto te puede servir:


Sub GuardaLibro()
Application.ScreenUpdating = False
'copiamos el rango seleccionado
Range("D8:H8").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open "G:\Factura\Factura.xls"
Sheets("ORTIGOSACLIENTES").Select
'Nos posicionamos en la última fila
Range("C3:C65536").Find("").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'desactivamos el modo Copiar
Application.CutCopyMode = False
'Guardamos el libro y salimos
ActiveWorkbook.Save
Workbooks("Factura.xls").Close
Application.ScreenUpdating = True
End Sub

Es decir prueba esta modificación. Saludos

Invitado


Invitado
Gracias tyno, me ha encantado la macro, la guar do porque seguro que le saco partido. Gracias tyno.
En este caso, no es lo que necesito, despues de dos dias trabajandolo, te he he explicado el error que me da con los privtes de las narices y no se como solucionarlo. Si me pudieras echar una mano te lo agradeceria un monton. te mando un ejemplo para el que le venga bien, sin los privates en ThisWorkbook.
Un abrazo tyno
Archivos
Macro.zip
(100 KB)

Invitado


Invitado
He probado y me da el mismo error :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Pero si le quito los private de las narices me funciona perfectamente

Un saludo

tyno


y donde esta ese codigo en el archivo que has subido?

Invitado


Invitado
Esta en el modulo1 :
Sub GuardaLibro()
Application.ScreenUpdating = False
'copiamos el rango seleccionado
Range("D8:H8").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open "M:\Descargas\Macro\Pegar.xls"
Sheets("ORTIGOSACLIENTES").Select
Range("C3").Select
'Nos posicionamos en la última fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'se repite el ciclo
Wend
filalibre = ActiveCell.Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
'desactivamos el modo Copiar
Application.CutCopyMode = False
'Guardamos el libro y salimos
ActiveWorkbook.Save
Workbooks("Pegar.xls").Close
Application.ScreenUpdating = True
End Sub

Para que funcione le he quitado, pero lo necesito es en ThisWorkbook, los privates que he quitado son:
Private Sub Workbook_Open()
Worksheets.Application.Worksheets("Presentacion").Activate
Application.Run "PANTALLACOMPLETA"
   ActiveSheet.Protect Password:="1"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Call DeletePopUp
End Sub
Private Sub Workbook_BeforeClosePROVEDORES(Cancel As Boolean)
   Call DeletePopUpPROVEDORES
End Sub

Un saludo

tyno


Hola Luis. 
He probado el archivo y he modificado el código como te lo había indicado y parece funcionar todo bien, no me salta ese error que mencionas. Incluso probé tu archivo con el código que tenías en principio y tampoco me da error. En cada caso se copia el rango D8:H8 y lo pega en la primer fila vacía del libro Pegar. Por  las dudas ¿no tienes las celdas protegidas? Como no me surge ningún error no sabría que indicarte.

Lo que no entiendo que es lo del Private que mencionas.

Saludos

Invitado


Invitado
Hola tyno, gracias por tus atenciones.
Voy haber si me explico mejor, ya que soy demasiado torpe.
La macro me funciona perfecta si en el Libro "Pegar.xls" no le pongo en "ThisWorkbook" :
Private Sub Workbook_Open()
Worksheets.Application.Worksheets("Presentacion").Activate
Application.Run "PANTALLACOMPLETA"
    ActiveSheet.Protect Password:="1"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call DeletePopUp
End Sub
Private Sub Workbook_BeforeClosePROVEDORES(Cancel As Boolean)
    Call DeletePopUpPROVEDORES
End Sub
Pero resulta que en el original donde voy a usar esta macro, necesito tenerlos puesto en  "ThisWorkbook".
Es entonces cuando la macro no funciona y me da el error:
Sub GuardaLibro()
Application.ScreenUpdating = False
'copiamos el rango seleccionado
Range("D8:H8").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open "M:\Descargas\Macro\Pegar.xls"
Sheets("ORTIGOSACLIENTES").Select
Range("C3").Select
'Nos posicionamos en la última fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'se repite el ciclo
Wend
filalibre = ActiveCell.Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False

'desactivamos el modo Copiar
Application.CutCopyMode = False
'Guardamos el libro y salimos
ActiveWorkbook.Save
Workbooks("Pegar.xls").Close
Application.ScreenUpdating = True
End Sub
Te subo el archivo lo mas parecido al libro que utilizaria.
Un saludo
Archivos
Copiar y Pegar.zip
(130 KB)

tyno


Ok, vamos por parte.
¿lo que necesitas es que esta macro que copia/pega se ejecute al momento de cerrar el libro Copiar?

Si es así, entonces en ThisWorkbooks inserta el código de esta manera y prueba

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
'copiamos el rango seleccionado
Range("D8:H8").Select
Selection.Copy
'Abrimos el libro donde se va a copiar
Application.Workbooks.Open "M:\Descargas\Macro\Pegar.xls"
Workbooks("Pegar.xls").Activate
With Workbooks("Pegar.xls").Sheets("ORTIGOSACLIENTES")
.Activate
.Select
.Range("C3").Select
'Nos posicionamos en la última fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'se repite el ciclo
Wend
filalibre = ActiveCell.Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'desactivamos el modo Copiar
Application.CutCopyMode = False
'Guardamos el libro y salimos

End With
ActiveWorkbook.Save
ActiveWorkbook.Close

Application.ScreenUpdating = True
End Sub

Invitado


Invitado
Esta macro, se ejecuta cuando se produce una factura antes de borrarla, para asentarla en el libro de Facturación, que en este caso es " Pegar" en la pagina "ORTIGOSACLIENTES".
Y después de asentarlo se cierra.
El problema que tengo, es que en el libro de Facturación, que en este caso es " Pegar" en "ThisWorkbook" le tengo puesto :


Private Sub Workbook_Open()
Worksheets.Application.Worksheets("Presentacion").Activate
Application.Run "PANTALLACOMPLETA"
   ActiveSheet.Protect Password:="1"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Call DeletePopUp
End Sub
Private Sub Workbook_BeforeClosePROVEDORES(Cancel As Boolean)
   Call DeletePopUpPROVEDORES
End Sub

Pero resulta que en el original donde voy a usar esta macro, necesito tenerlos puesto en  "ThisWorkbook".
Es entonces cuando la macro no funciona y me da el error en la macro "Sub GuardaLibro" en la linea :
filalibre = ActiveCell.Row
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
Perdona las molestias.
Un saludote fuerte y gracias por tus molestias

tyno


La verdad que no logro darme cuenta con lo que me estas explicando,  no veo relación entre esto:

Private Sub Workbook_Open()
Worksheets.Application.Worksheets("Presentacion").Activate
Application.Run "PANTALLACOMPLETA"
   ActiveSheet.Protect Password:="1"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Call DeletePopUp
End Sub
Private Sub Workbook_BeforeClosePROVEDORES(Cancel As Boolean)
   Call DeletePopUpPROVEDORES
End Sub

...con el código "Sub GuardaLibro".

Como verás en el código que te he pasado recién, el que va en ThisWorkbook del libro Copia es el mismo código  de Sub GuardaLibro. Es decir, el código de Sub GuardaLibro tiene que estar en el libro Copiar ¿eso se entiende? yo en lugar de crear un módulo con el código Sub GuardaLibro lo que hice fue insertar ese código directamente en el evento Private Sub Workbook_BeforeClose(Cancel As Boolean) en ThisWorkbook  del libro Copiar, que por cierto lo probé y graba bien los datos.
Lo de crear un modulo que contenga el código  Sub GuardaLibro  no esta mal, es solo otra forma de hacer las cosas, lo único que tendrías que hacer en el evento Private Sub Workbook_BeforeClose(Cancel As Boolean) en ThisWorkbook  del libro Copiar es disponer código de esta manera:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
GuardaLibro
End Sub

Por lo que me estas comentando, quizás te mal entiendo, pero me da la impresion de que estás intentando ejecutar  el código  Sub GuardaLibro
desde el archivo Pegar en lugar del libro Copiar.

Invitado


Invitado
Creo que no has mirado el ultimo archivo que te he mandado, por todo lo que me dices.
O yo no me se explicar.
Creo que te estoy molestando demasiado, no te preocupes, ya me has ayudado demasiado tyno.
Un saludo

Invitado


Invitado
Hola tyno, he logrado hacerlo, teniendo los dos libros abiertos.
Un saludo muy fuerte y que Dios te bendiga.

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.