macro

10/08/2007 - 18:12 por leslie | Informe spam
Hola

tengo la necesidad de una macro la cual dentro de un libro me actualice una
hoja donde tengo una lista de empleados, en base a un archivo que me envian
todos los dias, pero yo necesito que esta hoja con la lista este oculta para
que quien utilice el libro no la pueda ver, pero ellos mediante un boton,
corran la macro de actualizacion, y la macro me abra la hoja, la actualice y
la deje oculta.

yo lo intente pero me genera un error y esta es la codificacion:

Sub macro()
'
'Macro
' Macro grabada el 10/08/2007
'

'
Sheets("GUARDIAS").Visible = True
Range("B2:J2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("B2").Select
ChDir "C:\"
Workbooks.Open Filename:="C:\guardias.xls"
Range("B2:G2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("nomina diario.xls").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("B2").Select
ActiveWindow.SelectedSheets.Visible = False
End Sub
Mi error me lo envia en la frace: Selection.PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Espero me puedan ayudar

gracias
saludos

Preguntas similare

Leer las respuestas

#1 Ivan
10/08/2007 - 19:23 | Informe spam
hola Leslie,

si te he entendido bien (que no estoy muy seguro) prueba [con copias]
la macro que te pongo al final, pero 1º te comento los requisitos (que
+/- son los que expones)

1º) el codigo debes pegarlo en un modulo normal del editor de VBA, del
libro que contiene la hoja oculta ("GUARDIAS")

***pasos por si los desconoces>>> alt+F11 => en la ventana explorador
de proyectos <normalmente esta a la izquierda, y si no esta pulsa Ctrl
+R> asegurate de que el seleccionado es el proyecto correspondiente a
dich libro [+/- pondra:'VBProjet("nomina diario.xls")'] ), una vez
segura => menu 'Insertar' => 'Modulo'

2º) ajustandolo a tu codigo ( por cierto, creo que este seria una de
las [creo que varias] causas del error) el rango borrado en la hoja
"GUARDIA" iria de la columna b a la J, mientras que el copiado del
libro "guardias.xls" va de la b a la g, con lo que el rango copiado y
el de destino son necesariamente diferentes [ en estos casos lo suyo
es pegarlo en la primera celda [en realidad seria a partir de la
primera celda] del rango de destino]

no se si sera un error de trranscripcion, pero si es asi corrige lo
evidente. Yo de momento lo he dejado tal cual y no afectaria al
funcionamiento (se pega a partir de B2)

3º) me surgen algunas dudas que he adaptado de la siguiente manera:

a) no tengo claro cual es la primera celda del rango a manipular,
pero he dado por hecho que es la B2 [supongo que la fila 1 contendria
los titulos

b) he dado por hecho que las filas a borrar/actualizar van desde la
2 a la ultima con datos, aunque las repeticiones del end(xldown)
levantan dudas [ de hecho con mi supuesto anterior estarias
seleccionando/copiando/pegando el rango que va desde la ultima fila
con datos hasta la ultima de la hoja <normalmente la 65536> (aunque
quizas este equivocado)

c)tambien he supuesto que la 1º columna ('B') siempre va a tener
datos si la fila los tiene

d) el libro que abres tiene una sola hoja, o al menos estas segura de
que siempre se va aabrir en la hoja adecuada (donde esta el rango a
copiar)

Sub CopiarRango()
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("GUARDIAS")
If .Range("b2") = "" Then Exit Sub
.Range("B2:J" & .[b65536].End(xlUp).Row).ClearContents
Workbooks.Open "C:\guardias.xls"
Range("B2:G" & [b65536].End(xlUp).Row).Copy
.Range("b2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
ActiveWorkbook.Close False
End With
End Sub

a ver si hay suerte

un saludo
ivan

PD: la hoja no se muestra pues he supuesto que no es necesario. En
cuanto a ejecutarla, asignsela a un boton o prueba con F5 desde el
editor o con alt+F8 desde excel y seleccionarla del cuadro y ejecutar
Respuesta Responder a este mensaje
#2 Ivan
10/08/2007 - 19:35 | Informe spam
hola de nuevo,

disculpame, pero cambialo por este (da por echo que si la celda B2 de
(la hoja) del libro "guardias.xls" esta vacia es que no hay datos en
la lista, con lo que no hay nada que copiar/pegar

Sub CopiarRango()
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("GUARDIAS")
If .Range("b2") <> "" Then _
.Range("B2:J" & .[b65536].End(xlUp).Row).ClearContents
Workbooks.Open "C:\guardias.xls"
If Range("b2") <> "" Then _
Range("B2:G" & [b65536].End(xlUp).Row).Copy
.Range("b2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
ActiveWorkbook.Close False
End With
End Sub

en cuanto al error veo que el nº de columnas es igual (de b a g), pero
no estoy tan seguro en cuanto a las filas

a ver si hay suerte y si quieres comentas

un saludo
Ivan
Respuesta Responder a este mensaje
#3 Ivan
10/08/2007 - 19:41 | Informe spam
disculpame pero creo que hoy estoy aun mas torpe de la habitual

haz las pruebas con esta otra:

Sub CopiarRango()
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("GUARDIAS")
If .Range("b2") <> "" Then _
.Range("B2:J" & .[b65536].End(xlUp).Row).ClearContents
Workbooks.Open "C:\guardias.xls"
If Range("b2") <> "" Then
Range("B2:G" & [b65536].End(xlUp).Row).Copy
.Range("b2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
End If
ActiveWorkbook.Close False
End With
End Sub

un saludo y lo dicho, disculpas
Ivan
Respuesta Responder a este mensaje
#4 leslie
10/08/2007 - 22:54 | Informe spam
Hola Ivan:

esta ultima fue la correcta gracias por la ayuda otra pregunta oye tu me
puedes recomendar un libro donde pueda yo tener todos los comandos que se
utilizan en visual basic.

"Ivan" escribió:

disculpame pero creo que hoy estoy aun mas torpe de la habitual

haz las pruebas con esta otra:

Sub CopiarRango()
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("GUARDIAS")
If .Range("b2") <> "" Then _
.Range("B2:J" & .[b65536].End(xlUp).Row).ClearContents
Workbooks.Open "C:\guardias.xls"
If Range("b2") <> "" Then
Range("B2:G" & [b65536].End(xlUp).Row).Copy
.Range("b2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
End If
ActiveWorkbook.Close False
End With
End Sub

un saludo y lo dicho, disculpas
Ivan


Respuesta Responder a este mensaje
#5 Ivan
10/08/2007 - 23:30 | Informe spam
hola Lesli, me alegro te haya servido

un libro donde pueda yo tener todos los comandos que se




utilizan en visual basic.



echale un ojo al mensaje nº 9 de este hilo (no te asustes por el
mensaje y vete directamente al final del nº 9 y empieza a subir). Creo
que hay unas cuantas posibilidades

http://tinyurl.com/3cw7rl

y en cuanto a un libro a mi me parece muy bueno Este

Excel 2003, programacion en VBA de John Walkenbach, paero cuesta un
dinerillo

un saludo y espero te sirva
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida