Agregar formato a código

15/10/2007 - 15:06 por GRIEGO59 | Informe spam
Hola!
Tengo el siguiente código que funciona en la hoja “menú”:

' en un modulo normal -
'
Sub Copiar()
Dim ultF As Long
If [e34] = "" Then _
MsgBox "El nombre es obligatorio": _
[e34].Select: Reponer: Exit Sub
With Worksheets("préstamos")
ultF = .[a65536].End(xlUp).Row + 1
.Cells(ultF, 1) = [e34]
.Cells(ultF, 2) = [e35]
.Cells(ultF, 4) = [e36]
.Cells(ultF, 6) = [e37]
.Cells(ultF, 8) = [e38]
.Cells(ultF, 10) = [e39]
.Cells(ultF, 11) = [e40]
.[a1].CurrentRegion.Sort key1:=.[a2], _
order1:=xlAscending, header:=xlYes
End With
Range("e34,e36,e37,e39,e40").ClearContents
[e34].Select
Reponer
End Sub
Sub Reponer()
Application.OnKey "{enter}"
Application.OnKey "{return}"
End Sub

Funciona bien, pero me gustaría que:
Copie y pegue manteniendo el formato de destino sobre todo las fechas.
Que al final cuando ordena las filas, lo haga en función, primero de la
columna “a” y luego en función de la columna “b”.


Notas:
La hoja de destino, donde debe pegar tiene la función Menú, datos, lista,
crear lista.
Antes funcionaba al presionar “enter” estando posicionado en una celda
determinada, pero ahora funciona al presionar un botón.
Algunas veces, inexplicablemente copia y pega debajo de la lista.

Gracias por la ayuda
Griego59
 

Leer las respuestas

#1 Héctor Miguel
16/10/2007 - 05:00 | Informe spam
hola, Darío !

__ 1 __
Tengo el siguiente codigo que funciona en la hoja "menu":
Funciona bien, pero me gustaria que:
Copie y pegue manteniendo el formato de destino sobre todo las fechas.


__ 2 __
Que al final cuando ordena las filas, lo haga en funcion, primero de la columna "a" y luego en funcion de la columna "b".


__ 3 __
Notas:
La hoja de destino, donde debe pegar tiene la funcion Menu, datos, lista, crear lista...
Algunas veces, inexplicablemente copia y pega debajo de la lista.



1) aunque la propiedad ".Value" es la propiedad "por omision" de un objeto "Range" (por lo que no es indispensable indicarla)...
algunas veces conviene hacerlo de manera explicita (entre otros, porque te agrega el formato numerico del valor que se copia)
o sea, agrega -> .Value despues de cada celda copiada (p.e.) de -> .Cells(ultF, 1) = [e34] a -> .Cells(ultF, 1) = [e34].Value

2) puedes agregar un segundo criterio de ordenacion en la instruccion donde usas el metodo .Sort (+/- como sigue):
.[a1].CurrentRegion.Sort _
Key1:=.[a2], Order1:=xlAscending, _
Key2:=.[b2], Order2:=xlAscending, Header:=xlYes

3) (presumiblemente) cuando te sucede que los datos sean copiados "despues" de la lista (auto-expandible) creada...
se debera a que la celda "activa" (en ese momento en la hoja "prestamos") esta dentro de tu listado -?-
con lo cual, la ultima celda esta (provisionalmente) "ocupada" por un asterisco, o por la palabra "totales", o... ???
-> puedes "corregir/prevenir/evitar/..." esa posibilidad, si cambias de buscar la ultima fila "basada" en la columna A por la B
de: -> ultF = .[a65536].End(xlUp).Row + 1
a: -> ultF = .[b65536].End(xlUp).Row + 1

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto __
' en un modulo normal -
Sub Copiar()
Dim ultF As Long
If [e34] = "" Then _
MsgBox "El nombre es obligatorio": _
[e34].Select: Reponer: Exit Sub
With Worksheets("préstamos")
ultF = .[a65536].End(xlUp).Row + 1
.Cells(ultF, 1) = [e34]
.Cells(ultF, 2) = [e35]
.Cells(ultF, 4) = [e36]
.Cells(ultF, 6) = [e37]
.Cells(ultF, 8) = [e38]
.Cells(ultF, 10) = [e39]
.Cells(ultF, 11) = [e40]
.[a1].CurrentRegion.Sort key1:=.[a2], _
order1:=xlAscending, header:=xlYes
End With
Range("e34,e36,e37,e39,e40").ClearContents
[e34].Select
Reponer
End Sub
Sub Reponer()
Application.OnKey "{enter}"
Application.OnKey "{return}"
End Sub

Preguntas similares