ú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

Preguntas similare

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:

Mostrar la cita
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.
Mostrar la cita
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:

Mostrar la cita
=> 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):

Mostrar la cita
=> 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...)

Mostrar la cita
=> 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.
#2 José Rafael
25/08/2009 - 11:20 | Informe spam
Gracias Héctor y sobre todo por tu paciencia intentando averiguar lo que
queremos... entre tanto, lo he solucionado de otra manera quizás complicada
o rebuscada pero efectiva. Sé que utilizo muchas lineas de código que se
podrían resumir o escribir de otra manera y que algunas sobra pero ya
sabes soy muy novato.
De todas formas por si es de alguna utilidad para alguien pongo el código
que utilizo y hace lo que necesito:

Sub Actualizarinformes()
'
' Actualizarinformes Macro
' Macro grabada el 25/07/2009 por hes040
'
Dim fila As Integer
Dim columna As String
Application.ScreenUpdating = False
Sheets("Crear informes").Select
Range("B20").Select
ActiveCell.FormulaR1C1 = "=RC[25]"
Range("C20:I20").Select
ActiveCell.FormulaR1C1 = "=RC[25]"

Range("B20:B35").Select
Selection.FillDown
ActiveWindow.SmallScroll Down:=-36
Range("C20:I35").Select
Selection.FillDown
Range("B20:I35").Select
Selection.Copy


'solución al problema que habia planteado

Sheets("Crear informes").Select
For fila = 20 To 35
If Range("AA" & fila).Value = 0 Then Range("AA" & fila).ClearContents
If Range("AB" & fila).Value = 0 Then Range("AB" & fila).ClearContents
'End If
Next fila




' RESTABLECE LA COPIA DEL INFORME
Sheets("Crear informes").Select

Range("AD20:AE35").Select
Selection.Copy

Range("AA20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll ToRight:=-18
Range("B26").Select
'PREPARA LAS CELDAS A COPIAR DE CREAR INFORMES
Range("B20:B35").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

Range("C20:I35").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M36").Select
Application.ScreenUpdating = True



Sheets("Crear informes").Select
For fila = 20 To 35
If Range("B" & fila).Value = 0 Then Range("B" & fila).ClearContents
If Range("C" & fila).Value = 0 Then Range("C" & fila & ":I" &
fila).ClearContents
'End If
Next fila

Sheets("Crear informes").Select
Range("M1").Select
Range("M1") = "Actualizado"
Range("L20").Select

Range("L20").ClearContents
End Sub


MUCHAS GRACIAS POR TU TIEMPO. (lo digo con altavoz... jeje)




"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida