Cambiar datos en hoja con eventos de otra

11/03/2006 - 04:40 por klomkbock | Informe spam
Hola a todos

Estoy intentando que con eventos del modulo de una hoja me cambie
determinados datos de esta y de otra hoja del mismo libro. Lo he intentado
con SelctedChange y con Change a secas pero no hay manera. He intentado
adaptar el codigo que en un modulo normal funciona bien pero me topo con
algo que produce disparates,o, como ahora mismo, directamente no hace nada.

DISCULPAD, PERO HE DADO AL INTRO SIN QUERER Y CREO QUE YA LLEVO POR LO
MENOS DOS MENSAJES.

Continúo. Se trata de un libro con dos hojas. En el ejemplo, en la primera
hay una lista de articulos con referencia unica y los stocks de tienda,
almacen(en este ejemplo no interviene para nada), taras y variacion de
stock en tienda(columnas A; B; C; D; G), nombre de articulo y PVP (col. E;
F). En la segunda hoja, que haria la funcion de formulario, estarian los
campos: Ref, Vendidos, Devueltos, Baja, Articulos y PVP, columnas A; B; C;
D; E y F respectivamente.
Lo que intento es que al introducir en la columna A de la 2ª hoja la Ref
del articulo me ponga en las columnas E y F el nombre y el Pvp, y que a la
vez me reste al stock de tienda en la hoja 1 las cantidades vendidas y las
bajas, y que me añada a este stock de tienda las devueltas y al de taras
las bajas. En la hoja 2 (formulario) pueden repetirse los registro y
normalmente solo "usan" uno de los campos (vendido, devuelto y baja
normalmente solo).
Bueno no se si me he explicado ni si podreis ayudarme, pero por si acaso
hay va el ultimo codigo que he intentado y el que me funciona ejecutandolo
desde un modulo normal.

Muchas gracias de antemano.

Un saludo y hasta pronto.
Ivan

Private Sub Worksheet_Change(ByVal Target As Range)
Dim prueba_ventas As Workbook
Dim Inventario As Worksheet, Ventas As Worksheet
Dim Celda As Range, Ref_I As Range
Set prueba_ventas = Application.Workbooks("prueba ventas.xls")
Set Inventario = prueba_ventas.Sheets("Hoja1")
Set Ventas = prueba_ventas.Sheets("Hoja2")
Set Ref_I = Inventario.Range("a2:a20")
Dim i As Integer
Application.ScreenUpdating = False
For Each Celda In Ref_I
With Celda
If Target.Column = i Then
Select Case i
Case 1
If .Value = Target Then _
Target.Offset(, 4) = .Offset(, 4) And _
Target.Offset(, 5) = .Offset(, 5)
Case 2
.Offset(, 1) = .Offset(, 1) - Target
.Offset(, 6) = -Target
Case 3
.Offset(, 1) = .Offset(, 1) + Target
.Offset(, 6) = .Offset(, 6) + Target
Case 4
.Offset(, 1) = .Offset(, 1) - Target
.Offset(, 3) = .Offset(, 3) + Target
End Select
End If
End With
Next Celda
End Sub



Sub CopiarDatos()
Set prueba_ventas = Application.Workbooks("prueba ventas.xls")
Set Inventario = prueba_ventas.Sheets("Hoja1")
Set Ventas = prueba_ventas.Sheets("Hoja2")
Set Inv1 = Inventario.Range("a2:a20")
Set Inv2 = Ventas.Range("a2:a20")
Application.ScreenUpdating = False

For Each Celda2 In Inv2
Ref2 = Celda2
For Each Celda1 In Inv1
Ref1 = Celda1
If Ref2 = Ref1 And IsNumeric(Celda2.Offset(, 1)) _
And IsNumeric(Celda2.Offset(, 3)) Then
With Celda2
.Offset(, 4) = Celda1.Offset(, 4)
.Offset(, 5) = Celda1.Offset(, 5)
End With
With Celda1

.Offset(, 1) = .Offset(, 1) - Celda2.Offset(, 1)
.Offset(, 6) = .Offset(, 6) - Celda2.Offset(, 1)
.Offset(, 1) = .Offset(, 1) + Celda2.Offset(, 2)
.Offset(, 6) = .Offset(, 6) + Celda2.Offset(, 2)
.Offset(, 1) = .Offset(, 1) - Celda2.Offset(, 3)
.Offset(, 6) = .Offset(, 6) - Celda2.Offset(, 3)
.Offset(, 3) = .Offset(, 3) + Celda2.Offset(, 3)
End With
End If
Next Celda1
Next Celda2


End Sub
 

Leer las respuestas

#1 Francisco GMAIL
11/03/2006 - 06:01 | Informe spam
Ya intentaste usar la barra de herramientas de formularios que se puede
utilizar dentro de excel, con esa barra me ha tocado ver
ejemplos de lo que buscas.

Saludos

Francisco

Preguntas similares