Transponer automáticamente registros con macros

26/04/2010 - 19:00 por CARLOS CARNERO | Informe spam
Buenas a todos. Un saludo especial a Héctor a quien me dirijo para
solicitarte que por favor me ayudes en mi entrampamiento, ya que estoy
probando distintas variables para descifrar la siguiente sintaxis,
pero lastimosamente no logro el objetivo.

Tengo en un Excel 2007 con dos hojas protegidas y sólo algunas celdas
habilitadas que realizan esta operación: una es “Formulario” que es el
origen y la otra “tabla_detalle” que es el destino: En formulario
quiero copiar ó transponer automáticamente el rango “C4:C15” (C13 y
C14 tiene formato “dd/mm/yyyy” y “dd/mm/yyyy hh:mm” respectivamente),
con el mensaje de confirmación "¿Desea guardar los cambios?" (y luego
del mensaje de confirmación borrarlos), a la otra hoja
“tabla_detalle” B2:M2, siendo B1, C1, D1, autonuméricos, a modo que
cada vez que se registre un expediente en el formulario este se
traslade automáticamente a la otra hoja.

Sub Rectánguloredondeado_Haga_clic_en()
Dim Consultas As Byte
Consultas = Application.CountA(Range("c4"))
If Consultas = 0 Then Exit Sub
If MsgBox("¿Desea guardar los cambios?", vbYesNo, "Confirmación") vbNo _
Then Exit Sub
With Worksheets("tabla_detalle").Range("a65536").End(xlUp).Offset(1,
5)
.Resize(Consultas, 2).Value = Range("c4").Resize(Consultas).Value
.Offset(, -4).Resize(Consultas, 4).Value = Array( _
Range("C4").Value, Range("C5").Value, Range("C6").Value,
Range("C7").Value)
With .Offset(, -5).Resize(Consultas)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
End With
Range("c4:c15").Resize(Consultas).ClearContents
End Sub


Gracias,

Carlos

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
29/04/2010 - 06:30 | Informe spam
hola, Carlos ! (no hay sincronia en los "moribundos" grupos nntp y los de
"web") :-((
esto es lo que ya te habia contestado (a ver si ahora si lo dejan pasar ?????)

1) lamento no haber sido claro al recpecto, pero... al decir en la propuesta
anterior:
"... luego del mensaje (similar al de tu codigo)... probar con una
instruccion +/- como la siguiente"
me referia a "sustituir" (no a incluir ademas de lo que ya tenias en el
codgo expuesto)

ademas, al dejar intactas las instrucciones "End With" y haber eliminado
sus inicios (With <objeto>...)
le rompes la estructura para poder usar dentre de esos bloques los
sub-objetos o colecciones de cada "With xyz..."

2) el codigo "inicial", lo adaptaste de una consulta entre abril y mayo de
2008 ("copiar consultas y pegar en registros")
por lo que las adaptaciones que haces no siguen el criterio de
resolucion de "aquella" situacion (p.e.)
=> Consultas = Application.CountA(Range("c4")) <= esta parte siempre
devolvera 1 o 0 (segun si [C4] tiene algo o no)
cuando la situacion a resolver buscaba cuantas celdas en un rango tenian
"algo":
=> Consultas = Application.CountA(Range("c2:c15"))

otro punto importante es conocer la estructura de datos en la hoja
"tabla_detalle" y rango [B:M] p.e.
- que hay en la columna A y que hay despues de la columna M (?)
- tienes filas "preparadas" en la columna A (autonumericas) por si
llegas a necesitarlas ?
- cual es el rango que se selecciona te posicionas en [B1] y pulsas:
<ctrl> [shift] * (?) (la region actual)

saludos,
hector.
Respuesta Responder a este mensaje
#7 CARLOS CARNERO
30/04/2010 - 00:32 | Informe spam
Hola Héctor es lo que he respondido, que después de la columna "M", no
hay nada. En la columna A (a partir de la fila 2 son los registros que
se copian desde la hoja origen (Formulario) , ya que que la fila 1 de
la hoja destino (Tabla_detalles!A1:M1) estan los titulos de los
campos, que son los de la hoja origen Formulario!A3:a15 :
N° de Incidencia Serie Documental Subserie_Correspondencia Número de
Documento Empresa / Institución Remitente * Sumario Remitente
Destinatario Área del Destinatario Gerencia Destino Fecha de la
Correspondencia Fecha de Recepción Observaciones


Lo que deseo es que se copien desde Formulario!C4:C15 a
Tabla_detalles!B2:M2 cuando se ejecute por primera vez la macro, en la
segunda que se ejecute la macro al Tabla_detalles!B3:M3 y asi
sucesivamente por el efecto de ejecución de macro.

Saludos,

Carlos


On 28 abr, 23:30, Héctor Miguel
wrote:


    otro punto importante es conocer la estructura de datos en la hoja
"tabla_detalle" y rango [B:M] p.e.
    - que hay en la columna A y que hay despues de la columna M (?)
    - tienes filas "preparadas" en la columna A (autonumericas) por si
llegas a necesitarlas ?
    - cual es el rango que se selecciona te posicionas en [B1] y pulsas:
<ctrl> [shift] * (?) (la region actual)

saludos,
hector.
Respuesta Responder a este mensaje
#8 Héctor Miguel
30/04/2010 - 02:04 | Informe spam
hola, Carlos (a ver si lo dejan pasar) ???

Lo que deseo es que se copien desde Formulario!C4:C15 a Tabla_detalles!B2:M2
cuando se ejecute por primera vez la macro, en la segunda que se ejecute la macro al Tabla_detalles!B3:M3
y asi sucesivamente por el efecto de ejecucion de macro...



Sub Pasar_Datos()
If MsgBox("Desea guardar los cambios?", vbYesNo, "Confirmacion") = vbNo Then Exit Sub
Worksheets("tabla_detalle").Range("b65536").End(xlUp).Offset(1).Resize(, 12).Value = _
Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)
Worksheets("formulario").Range("c4:c15").ClearContents
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#9 CARLOS CARNERO
30/04/2010 - 17:39 | Informe spam
Hola Héctor como siempre agradeciendo tu valiosa ayuda: Ahora esta
operando bien, salvo el autonumérico que se generaba y que ahora no
aplica nada. Me parece que esta relacionado con esta sintaxis:

Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
Pero cuando trato de ejecutarla me sale esta ventana:

“Error de compilación: Referencia no valida ó sin calificar” y a su
vez sombrea al “.Parent”

Esta es hasta el momento la sintaxis general que estoy aplicando:

Sub Rectánguloredondeado_Haga_clic_en()
If MsgBox("Desea guardar los cambios?", vbYesNo, "Confirmacion") vbNo Then Exit Sub

Worksheets("tabla_detalle").Range("b65536").End(xlUp).Offset(1).Resize(,
12).Value = _

Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
Worksheets("formulario").Range("c4:c15").ClearContents
End Sub

Saludos,


Carlos
Respuesta Responder a este mensaje
#10 CARLOS CARNERO
30/04/2010 - 17:57 | Informe spam
Héctor: acabo de solucionar ese último impase que te expuse en el
mensaje anterior con la formula de: =MAX(tabla_detalle!A:A)+1

Regracias mi estimado por tu invalorable apoyo.

Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida