Excel avanzado con macros

Buen día, tengo una macro que quiero organizar con dos variables, actualmente la macro solo esta para una sola variable: dicha macro consiste en tomar unos valores de la hoja principal y consultarlos en otra hoja para luego restar o sumar, teniendo en cuenta las cantidades existente para hacer la operación. Aquí envío el código:

If ActiveCell.Value = ID And CONTROLB = "SALIDA" Then
ActiveCell.Offset(0, 3).Select 'Valor (x,y) y = al valor de la columna 4 de la hoja inventario casilla con el nombre valor
bodegaanterior = ActiveCell.Value
If bodegaanterior < CANTIDAD Then
MsgBox "No hay artículos suficientes" & Chr(13) & "Sólo hay " & bodegaanterior & " artículos en bodega.", vbOKOnly + vbCritical, "**Información de bodega"
Sheets("PRINCIPAL").Select
Exit Sub
End If
bodeganueva = Val(ActiveCell.Value) - Val(CANTIDAD)
ActiveCell.Value = bodeganueva
Selection.End(xlToLeft).Select
MsgBox "Salieron " & CANTIDAD & " " & DESCRIPCIÓN & " de bodega." & Chr(13) & "Disminuyó de: " & bodegaanterior & " a " & bodeganueva & " artículos.", vbOKOnly + vbInformation, "**Salidas"

Estaba intentado cambiar a dos variables así ActiveCell.Offset([0, 3], [0,4]).Select

pero no funciono.

Gracias por su información, espero me puedan colaborar.

1 respuesta

Respuesta
1

Puedes poner toda la macro.

Poner un par de ejemplos de los datos que tienes y que es lo que quieres hacer con la segunda variable y que resultado esperas.

Saludos. Dam

Que pena, se me olvido darlo otro dato importante, espero sirva.

esta es la información que hay en la hoja PRINCIPAL:

B6 C6 D6 E6 F6
ID_CATEGORIA CATEGORÍA DESCRIPCIÓN CANTIDAD VALOR
DATOS FILA 7: XX XX XX XX XX

Esta macro solo corresponde a la casilla SALIDAS, la cual solo resta, la otra parte de la macro es igual, pero con la casilla de ENTRADA. Es decir la que le coloque arriba solo resta y esta es la otra que suma los valores comparados con el resto de la macro.

Sub INVENTARIO()
Dim CATEGORIA As String
Dim DESCRIPCION As String
Dim CANTIDAD As Integer
Dim VALOR As Integer
Dim CONTROLB As String
If Range("B6").Value = Empty Or _
Range("E6").Value = Empty Or _
Range("F6").Value = Empty Or _
Range("G6").Value = Empty Then
MsgBox "Favor de completar los datos", vbOKOnly + vbInformation, "**Información incompleta"
Exit Sub
End If
'Le damos valores a las variables
ID = Range("B6").Value
CATEGORIA = Range("C6").Value
DESCRIPCION = Range("D6").Value
CANTIDAD = Range("E6").Value
VALOR = Range("F6").Value
CONTROLB = Range("G6").Value
Sheets("INVENTARIO").Select
Range("A:A").Select
For x = 1 To 20
Selection.Find(What:=ID, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
similar = Len(ActiveCell.Text)
If Len(ID) = similar Then
ActiveCell.Select
Exit For
End If
Next x
If ActiveCell.Value = ID And CONTROLB = "ENTRADA" Then
ActiveCell.Offset(0, 3).Select
bodegaanterior = ActiveCell.Value
bodeganueva = Val(ActiveCell.Value) + Val(CANTIDAD)
ActiveCell.Value = bodeganueva
Selection.End(xlToLeft).Select
MsgBox "Se agregaron " & CANTIDAD & " " & DESCRIPCION & " a bodega." & Chr(13) & "Aumentó de: " & bodegaanterior & " a " & bodeganueva & " artículos.", vbOKOnly + vbInformation, "**Entradas"
Sheets("HISTORIAL.").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = ID
ActiveCell.Offset(0, 1).Value = CATEGORIA
ActiveCell.Offset(0, 2).Value = DESCRIPCION
ActiveCell.Offset(0, 3).Value = CANTIDAD
ActiveCell.Offset(0, 4).Value = VALOR
ActiveCell.Offset(0, 5).Value = CONTROLB
fecha = Now()
ActiveCell.Offset(0, 6).Value = fecha
MsgBox "Registro exitoso en historial", vbOKOnly + vbInformation, "**Historial"
Sheets("PRINCIPAL").Select
Range("B6,E6,F6,G6").ClearContents
Range("A1").Select

La parte restante es la que le envie inicialmente.

Muchas Gracias.

Te faltaron los ejemplos, que tienes en la hoja y que esperas que haga la macro. Saludos. Dam

Hola, en esta parte de la macro:

If ActiveCell.Value = ID And CONTROLB = "SALIDA" Then
ActiveCell.Offset(0, 3).Select 'Valor (x,y) y = al valor de la columna 4 de la hoja inventario casilla con el nombre valor
bodegaanterior = ActiveCell.Value
If bodegaanterior < CANTIDAD Then
MsgBox "No hay artículos suficientes" & Chr(13) & "Sólo hay " & bodegaanterior & " artículos en bodega.", vbOKOnly + vbCritical, "**Información de bodega"
Sheets("PRINCIPAL").Select
Exit Sub
End If

que tenga dos variables por ejemplo: ActiveCell.Offset("0, 3","0,4"). esto quiere decir que en la parte de la casilla "SALIDA" tal cual como hace automáticamente restando los valores que se ingresan en la hoja PRINCIPAL E7 CANTIDAD. haga lo mismo con F7 VALOR. teniendo en cuenta los valores registrados en la HOJA INVENTARIO.

GRACIAS.

No me pusiste los ejemplos. Yo esperaba algo asi:

HOJA "PRINCIPAL"

A B C D E F G
1 ID-CAT CAT DESC CANT VALOR CONTROL
2
3
4
5
6 CAT1 CATEGO CD 1 1 SALIDA
7

¿Y luego qué necesitas?

Hoja "inventario"

¿

?

Como sea, hice unos cambios en tu macro, en la parte de SALIDA.

Reemplázala por esta:

If ActiveCell.Value = ID And CONTROLB = "SALIDA" Then
ActiveCell.Offset(0, 3).Select 'Valor (x,y) y = al valor de la columna 4 de la hoja inventario casilla con el nombre valor
bodegaanterior = ActiveCell.Value
valoranterior = ActiveCell.Offset(0, 1)
If bodegaanterior < CANTIDAD Then
MsgBox "No hay artículos suficientes" & Chr(13) & "Sólo hay " & bodegaanterior & " artículos en bodega.", vbOKOnly + vbCritical, "**Información de bodega"
Sheets("PRINCIPAL").Select
Exit Sub
End If
bodeganueva = Val(ActiveCell.Value) - Val(CANTIDAD)
valornuevo = Val(ActiveCell.Offset(0, 1).Value) - Val(VALOR)
ActiveCell.Value = bodeganueva
ActiveCell.Offset(0, 1).Value = valornuevo
Selection.End(xlToLeft).Select
MsgBox "Salieron " & CANTIDAD & " " & DESCRIPCIÓN & " de bodega." & Chr(13) & "Disminuyó de: " & bodegaanterior & " a " & bodeganueva & " artículos.", vbOKOnly + vbInformation, "**Salidas"
End If

Saludos. Dam

Haz la prueba y si es lo que necesitas.

Hola, gracias por tu aporte, los cambios que hiciste si funcionaron, ahora me gustaría saber si deseo agregar una variable más en el futuro, como haría? repetiría los pasos agregando de igual forma lo que realizaste en negrilla:

valoranterior = ActiveCell.Offset(0, 1)

valornuevo = Val(ActiveCell.Offset(0, 1).Value) - Val(VALOR)

ActiveCell.Offset(0, 1).Value = valornuevo


Muchas gracias.

No es así, para agregar una nueva variable, primero tienes que declararla o asociarla al inicio de la macro, por ejemplo, al inicio de la macro se estableció lo siguiente:

CANTIDAD = Range("E6").Value
VALOR = Range("F6").Value

Primero tienes que establecer:

CANTIDAD = Range("E6").Value
VALOR = Range("F6").Value

NUEVAVARIABLE = Range("G6").Value

Entonces ocupas lo siguiente

NUEVAVARIABLEanterior = ActiveCell.Offset(0, 2)
NUEVAVARIABLEnuevo = Val(ActiveCell.Offset(0, 2).Value) - Val(NUEVAVARIABLE)
ActiveCell.Offset(0, 2).Value = NUEVAVARIABLEnuevo

Saludos. Dam

No olvides cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas