última celda libre de una matriz

23/08/2009 - 10:53 por José Rafael | Informe spam
Buenos días:
Tengo una matriz dentro del código que copio mas abajo, B20:B35 para poner
la fecha que contiene la celda P1 (de la misma hoja) en la primera celda
libre, por ejemplo la B26 y por otro lado otra matriz C20:I35 para "pegar"
en la fila que corresponda por ser la primera fila libre, por ejemplo, la
C26:I26, (se trata de una sola celda de formato combinada)..., el contenido
de la celda P5 que contiene diversos textos concatenados que forman el todo
de un informe.
Como quiera que en las citadas matrices existen fórmulas del tipo BuscarV en
todas las celdas..., no sé como llegar a la primera celda libre donde no
haya un tinforme ya pasado, sino únicamente la fórmula citada. Este es el
primer problema.
Otro problema es que cuando copiaba la celda P5 para trasladarla a la celda
combinada C26:I26 me sale un mensaje de error de que no se puede pegar
porque las celdas de copiado y pegado no tienen el mismo formato como para
pegar "solo valores".
Sin embargo al copiar el contenido de P5 en P19 ya como texto, si copio esta
última celda y lo intento pegar en la celda combinada C26, el pegado normal
lo admite y como vereis en el codigo que grabé puedo a posteriori "pegar" el
formato de la celda anterior...
El código adjunto es el grabado por el sistema al crear la macro y no me
aclaro en la situación de las celdas ni en la forma de pegar necesito
ayuda, claro.
Espero haberme explicado suficientemente, aunque es un tema complicado de
entender...Haced lo que podáis y gracias.
José Rafael



Sub grabarresultadodelavisita()
'
' grabarresultadodelavisita Macro
' Macro grabada el 22/08/2009 por hes040
'
Dim fechainforme As Range
Dim textoinforme As Range

Sheets("Crear informes").Select
'ActiveCell.Address '(como alternativa a encontra la primera celda
libre, quería "situarme" primero en la celda libre y registrarla ... ???)
Range("B26").Select
'ActiveCell.FormulaR1C1 = fechainforme '(quería pasa el range de la
celda donde me habia situado.. no funciona)

Range("P1").Select
Selection.Copy
'Range("&fechainforme&").Select '(queria utilizar el range de la celda
donde me habia situado a través de la variable..??)
Range("B26").Select '(primera celda libre de la matriz de fecha B20:B35,
aunque contiene una formula tipo BuscarV)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("P5").Select '(esta celda contiene una formula muy larga de
CONCATENAR, que recibe la información correspondiente)
Selection.Copy
Range("P19").Select (Aqui dejo el resultado de la celda P5, pero ya como
texto)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Range("C26:I26").Select '(esta es la primera celda combinada libre de
texto, aunque con una fórmula BuscarV, destino del contenido de P19)
ActiveSheet.Paste (pega el texto de P19 de forma "normal")
Range("C25:I25").Select '(copio para pegar el formato en C26 y he
conseguido mi objetivo)
Application.CutCopyMode = False
Selection.Copy
Range("C26").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

End Sub
 

Leer las respuestas

#1 Héctor Miguel
23/08/2009 - 22:42 | Informe spam
hola, José Rafael !

1) hay algunas inconsistencias en esta consulta (p.e.) dices:

Tengo una matriz dentro del codigo... B20:B35 para poner la fecha que contiene la celda P1
... en la primera celda libre por ejemplo la B26



y en el codigo que expones, tienes una "mezcla" de instrucciones que (supongo) SI funcionan
con otras del tipo "como quisieras" que funcionaran (pero se entiende que NO) p.e.
Range("C26:I26").Select '(esta es la primera celda combinada libre de texto, aunque con una formula BuscarV, destino del contenido de P19)



OJO: si contiene una formula buscarv... como puede ser al mismo tiempo considerada como una "celda libre" ?????

2) de forma similar, y hablando de celdas "combinadas", cuando dices:

y por otro lado otra matriz C20:I35 para "pegar" en la fila que corresponda por ser la primera fila libre
por ejemplo, la C26:I26, (se trata de una sola celda de formato combinada)..., el contenido de la celda P5
que contiene diversos textos concatenados que forman el todo de un informe.
Como quiera que en las citadas matrices existen formulas del tipo BuscarV en todas las celdas...
no se como llegar a la primera celda libre donde no haya un tinforme ya pasado, sino unicamente la formula citada.
Este es el primer problema.



=> podrias exponer (exactamente) las formulas del tipo buscarv que contienen las celdas combinadas (?)
(al menos) como para poder entender como debieran ser identificadas como "celdas libres" (ya que tienen formulas) -?????-

3) si continuamos hablando de celdas "combinadas" (cuando dices):

Otro problema es que cuando copiaba la celda P5 para trasladarla a la celda combinada C26:I26
me sale un mensaje de error de que no se puede pegar
porque las celdas de copiado y pegado no tienen el mismo formato como para pegar "solo valores".



=> considera que en un rango de celdas combinadas, solo la primer celda del rango contiene "los datos"
el resto de celdas (en el rango combinado) son celdas vacias (pero que "estorban" a la navegacion, conteo, seleccion, etc.)

4) continuando con el tema de las celdas combinadas (en esta parte de tu consulta...)

Sin embargo al copiar el contenido de P5 en P19 ya como texto, si copio esta ultima celda
y lo intento pegar en la celda combinada C26, el pegado normal lo admite
y como vereis en el codigo que grabe puedo a posteriori "pegar" el formato de la celda anterior...



=> no es lo mismo hacer un "copy" de una celda (P19) y "pegarla" en la primer celda de un rango combinado (C26)
que tratar de hacer el "pegado" (de UNA CELDA copiada) haciendo referencia al rango de celdas combinadas (C26:I26)

omito (re)transcribir el codigo (por razon de la "mezcla") y espero que puedas exponer detalles mas concisos (?)
saludos,
hector.

Preguntas similares