Pegado especial en celdas combinadas

15/01/2005 - 12:35 por Pablo | Informe spam
Hola a todos.
Deseo copiar y pegar solamente los valores de una a otra celda, ambas
identicas y ambas combinadas.
Lo hago con Pegado especial-->Valores y Excel responde " Esta operación
requiere que las celdas a combinar tengan el mismo tamaño".
Como podría hacerlo?

Gracias anticipadas

Pablo

Preguntas similare

Leer las respuestas

#6 Pablo
16/01/2005 - 12:31 | Informe spam
Gracias de nuevo; había hallado el error instantes antes de leer tu respuesta
(tenía ";" en vez de ",") cosas de las prisas ...
Necesito que la macro se ejecute desde mi libro personal de macros, o sea
fuera del libro de origen y destino de las celdas a Copiar-->Pegado especial.
Como encabezo la subrutina?
Gracias

"KL" wrote:

Prueba

Sheets ("hoja1").Range("d1, d10, d20")

Saludos,
KL

"Pablo" wrote in message
news:
> !!Funciona, gracias ??
> Como podria pegar un unico valor en varias celdas combinadas y
> discontinuas?
> He probado con
> Sheets ("hoja1").Range("d1;d10;d20")
> y no funciona.
> Gracias anticipadas
> Pablo
>
> "KL" wrote:
>
>> Pablo,
>>
>> Si solo se trata de copiar valores, en VBA puedes usar la siguiente
>> instruccion:
>>
>> Sub Test()
>> Sheets("Hoja1").Range("A1") = Sheets("Hoja2").Range("D1")
>> End Sub
>>
>> donde A1 y D1 son las primeras celdas de sus respectivos rangos de celdas
>> combinadas.
>> Tambien debes sustituir los nombres Hoja1 y Hoja2 con los nombres de las
>> hojas reales.
>>
>> Saludos,
>> KL
>>
>> "Pablo" wrote in message
>> news:
>> > Hola Ignacio
>> > Tanto la celda de origen como las de destino tienen formatos
>> > condicionales
>> > particulares cada una de ellas que no deseo modificar con el pegado
>> > normal,
>> > por eso preciso pegar solamente los valores.
>> > Conoces algun modo , quizas mediante VBA con el que realizarlo?
>> > Gracias y saludos
>> > Pablo
>> >
>> > "Ignacio Perez" wrote:
>> >
>> >> Hola Pablo:
>> >> Puede que te sirva copiar las celdas combinadas y pegar en las celdas
>> >> de
>> >> destino, volver a copiar en esas celdas y hacer un pegado especial de
>> >> solo
>> >> valores...
>> >> Un saludo.
>> >>
>> >> "Pablo" escribio en el mensaje
>> >> news:
>> >> > Hola a todos.
>> >> > Deseo copiar y pegar solamente los valores de una a otra celda,
>> >> > ambas
>> >> > identicas y ambas combinadas.
>> >> > Lo hago con Pegado especial-->Valores y Excel responde " Esta
>> >> > operacion
>> >> > requiere que las celdas a combinar tengan el mismo tamano".
>> >> > Como podria hacerlo?
>> >> >
>> >> > Gracias anticipadas
>> >> >
>> >> > Pablo
>> >> >
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#7 KL
16/01/2005 - 17:42 | Informe spam
Hola Pablo,

"Pablo" wrote in message...
Como encabezo la subrutina?



No es cuestion de como encabezas la subrutina, sino q como indicas la
localizacion de los rangos correctamente.

Si los rangos de origen y de destino se encuentran dentro del mismo libro
abierto (digamos Prueba.xls) pero q no sabemos si esta activo o no, entonces
esto deberia hacer el truco:

Sub CopiarValores()
With Workbooks("Prueba.xls")
.Sheets ("hoja1").Range("d1, d10, d20") = _
.Sheets("Hoja2").Range("d1, d10, d20")
End With
End Sub

Si en cambio sabemos q el libro en cuestion esta activo entonces bastaria
con esto:

Sub CopiarValores()
With ActiveWorkbook
.Sheets ("hoja1").Range("d1, d10, d20") = _
.Sheets("Hoja2").Range("d1, d10, d20")
End With
End Sub

Si los rangos estan en libros abiertos diferentes:

Sub CopiarValores()
Workbooks("Prueba1.xls") .Sheets ("hoja1").Range("d1, d10, d20") _
= Workbooks("Prueba2.xls") .Sheets("Hoja2").Range("d1, d10, d20")
End With
End Sub

Saludos,
KL

Saludos,
KL
Respuesta Responder a este mensaje
#8 Pablo
16/01/2005 - 21:49 | Informe spam
Que tal KL?
Efectivamente el libro de origen y destino es el mismo y siempre está
activo.He estado haciendo pruebas ( hay que aprender ) y el código funciona
de modo quizás " patatero" con
Sub CopiarValores()
Application.Windows ("Pruebas.xls")
Sheets ("hoja1").Range
...

pero probaré tu código, me parece mas elegante.

En otro orden de cosas ( me estas abriendo la mente ) ,
¿Como es posible bloquear la posición de las hojas de un libro?
Se trata de un libro en el que aportan datos varias personas y del que se
envia copia de dos de sus hojas por e-mail.
Con la macro siguiente ( desde luego verás que no es mia ) se crea el libro
de copia con solo dos hojas, la 3ª y la 4ª( el libro origen tiene 9 hojas y 5
estan ocultas) .


Private Sub CrearLibroRechazos()
Dim wkbOrigen As Workbook, wkbDestino As Workbook
Dim wksH As Worksheet
Dim n As Integer

Set wkbOrigen = ThisWorkbook
Set wkbDestino = Workbooks.Add
Application.ScreenUpdating = False

'Crear las hojas en el nuevo libro si hay menos de 2 _
o borrar las que excedan de dicho número.
If wkbDestino.Worksheets.Count < 2 Then
For n = wkbDestino.Worksheets.Count + 1 To 2
wkbDestino.Worksheets.Add
Next n
ElseIf wkbDestino.Worksheets.Count > 2 Then
Application.DisplayAlerts = False
For n = wkbDestino.Worksheets.Count To 3 Step -1
wkbDestino.Worksheets(n).Delete
Next n
Application.DisplayAlerts = True
End If

For n = 3 To 4
wkbOrigen.Worksheets(n).Cells.Copy
With wkbDestino.Worksheets(n - 2)
.Cells.PasteSpecial Paste:=xlValues
.Cells.PasteSpecial Paste:=xlFormats
.Name = wkbOrigen.Worksheets(n).Name
.Activate
.Range("A1").Select
.Protect Password:="****"
End With
Next n

wkbDestino.SaveAs ("C:\Mis Documentos\" & Right("Copia" & Trim(Str(Day(Now()
- 1))), 10) _
& (Format(Now() - 1, "mmm") & Right(Str(Year(Now() - 1)), 2))), , ,
("GT"), True


Application.CutCopyMode = False
Application.ScreenUpdating = True

Set wksH = Nothing
Set wkbDestino = Nothing
Set wkbOrigen = Nothing

End Sub




El problema se crea cuando alguien por error mueve alguna hoja de lugar
dentro del libro, con lo que cambia el orden y las hojas que se copian son
distintas.
¿como puedo evitarlo?
¿Como puedo copiar las hojas teniendo en cuenta su nombre y no su posicion?


Gracias anticipadas por el tiempo dedicado.
Pablo
Respuesta Responder a este mensaje
#9 KL
17/01/2005 - 00:51 | Informe spam
"Pablo" wrote in message...
?Como es posible bloquear la posicion de las hojas de un libro?
Se trata de un libro en el que aportan datos varias personas y del que se
envia copia de dos de sus hojas por e-mail.



Si esas personas no deben anadir mas hojas sino cambiar/introducir datos en
las ya existentes, entonces la manera mas limpia es protegiendo la
estructura del libro: menu Herramientas>Proteccion>Proteger Libro...

...se crea el libro
de copia con solo dos hojas, la 3? y la 4?( el libro origen tiene 9 hojas
y 5
estan ocultas) .
?Como puedo copiar las hojas teniendo en cuenta su nombre y no su
posicion?



Poder se puede, pero que pasa si los usuarios cambian el nombre de la hoja?

Saludos,
KL
Respuesta Responder a este mensaje
#10 KL
17/01/2005 - 01:04 | Informe spam
Pablo,

"Pablo" escribio..
El problema se crea cuando alguien por error mueve alguna hoja de lugar
dentro del libro, con lo que cambia el orden y las hojas que se copian son
distintas.
?como puedo evitarlo?
?Como puedo copiar las hojas teniendo en cuenta su nombre y no su
posicion?



Puedes probar este codigo.
Saludos,
KL

Private Sub CrearLibroRechazos()
Dim Hoja As Worksheet, cHojas As Variant
Dim rng As Range, Pass As String, i As Integer

'establece la lista de hojas relevantes y la contrasena para
protegerlas.
cHojas = Array("Hoja3", "Hoja4")
Pass = "Contrasena"

Application.ScreenUpdating = False
With ThisWorkbook

'copia y pega valores en las hojas relevantes.
For i = LBound(cHojas) To UBound(cHojas)
With .Worksheets(cHojas(i))
.Cells.Copy
.Cells.PasteSpecial Paste:=xlValues
.Protect Pass
Application.CutCopyMode = False
End With
Next i
Application.CutCopyMode = False

'Borra todas las hojas irrelevantes.
Application.DisplayAlerts = False
For Each Hoja In .Worksheets
On Error Resume Next
Select Case True
Case IsEmpty(WorksheetFunction.Match(Hoja.Name, cHojas, 0))
Hoja.Delete
End Select
On Error GoTo 0
Next Hoja
Application.DisplayAlerts = True

'Guarda copia del fichero.
.SaveAs ("C:\Mis Documentos\" & Right("Copia" & _
Trim(Str(Day(Now() - 1))), 10) & (Format(Now() _
- 1, "mmm") & Right(Str(Year(Now() - 1)), _
2))), , , ("GT"), True
End With
Application.ScreenUpdating = True
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida