Utilizar macro para dos hojas distintas Excel vba
Estoy necesitando que una macro la pueda utilizar tanto en una hoja de "ENTRADAS" y otra de "SALIDAS" ambas tiene una columna oculta con el tipo de movimiento.
Revisa lo siguiente y comentas
Sub Actualizar() Dim ultLinea As Long, u As Long, ultLineaDatos As Long Dim codigo As String, cantidad As Long, movimiento As String Dim posicion As String, ordenpicking As String Dim busquedaFilaDatos As Range Dim rangoBusqueda As String Dim filaRegistro As Long Dim x As Integer ' Dim h1 As Object, h2 As Object 'validar que los campos tengan la info necesaria Set h1 = Sheets("PICKING") 'Set h2 = Sheets("Control de Stock") u = h1.Range("A" & Rows.Count).End(xlUp).Row For i = 5 To u codigo = h1.Cells(i, 1) cantidad = h1.Cells(i, 2) movimiento = h1.Cells(i, 3) posicion = h1.Cells(i, 4) ordenpicking = h1.Cells(i, 6) If movimiento = "Entradas" Then Set h2 = Sheets("Entradas") Else Set h2 = Sheets("Salidas") End If 'Actualizar entrada de datos ultLineaDatos = h2.Range("B" & Rows.Count).End(xlUp).Row rangoBusqueda = "B11:B" & ultLineaDatos Set busquedaFilaDatos = h2.Range(rangoBusqueda).Find(posicion, lookat:=xlWhole) If busquedaFilaDatos Is Nothing Then 'MsgBox "El posición ingresada no existe", vbCritical, "Resultado" 'Exit Sub Else filaRegistro = busquedaFilaDatos.Row If movimiento = "Entradas" Then h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) + cantidad Else h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) - cantidad End If End If Next 'Limpiar datos h1.Range("A5:C" & u).Value = "" MsgBox "Actualización Exitosa", vbInformation, "Resultado" Range("A5").Select End Sub
.
.Sal u dos. Dante Amor. No olvides valorar la respuesta. G raci as
.
Gracias por la info Dante! Hay algo que hay que modificar en el código, las hojas activas que tengo en el libro son Control de Stock, ENTRADAS y la otra es SALIDAS. La de PICKING la reemplace por entradas y salidas, hay algo en el codigo que no me esta andando
Te envía un mensaje de error, ¿qué dice?
¿En qué línea se detiene la macro?
La estructura de la hojas "control de stock", ¿entradas y salidas son iguales?
Se detiene en esta línea:
¿Querés qué te la envíe por mail? Las hojas entradas y salidas son iguales, Control de Stock no
Set h1 = Sheets("PICKING")
¿Y ahora cómo se llama tu hoja donde capturas?
Antes se llamaba "picking"
Solamente cambia "picking" por el nombre que tienes ahora.
Si las estructuras de las hojas son diferentes, entonces tienes que explicar, en dónde vas a capturar y en dónde vas poner el resultado
Antes sumas la cantidad para las entradas y restabas para las salidas, pero ahora qué quieres hacer.
Donde capturo datos se llama ENTRADAS y otra de las hojas se llama SALIDAS, las 2 tienen la misma estructura. Hay posibilidad de ejecutar la macro en una hoja cambiandole en el código donde dice PICKING por entradas, y en la otra hoja lo mismo pero por SALIDAS??
Me lo imaginé al revés, mejor envíame tu archivo para revisar si se puede con una macro o con dos.
Mi correo [email protected]
Te anexo la macro actualizada
Sub Actualizar() Dim ultLinea As Long, u As Long Dim ultLineaDatos As Long Dim codigo As String, cantidad As Long, movimiento As String Dim posicion As String, ordenpicking As String Dim busquedaFilaDatos As Range Dim rangoBusqueda As String Dim filaRegistro As Long Dim x As Integer Dim h1 As Object, h2 As Object ' 'validar que los campos tengan la info necesaria Set h1 = ActiveSheet Set h2 = Sheets("Control de Stock") u = h1.Range("A" & Rows.Count).End(xlUp).Row For i = 5 To u codigo = h1.Cells(i, "A") cantidad = h1.Cells(i, "B") 'movimiento = h1.Cells(i, 3) posicion = h1.Cells(i, "C") ordenpicking = h1.Cells(i, "E") ' 'Actualizar datos ultLineaDatos = h2.Range("B" & Rows.Count).End(xlUp).Row rangoBusqueda = "B11:B" & ultLineaDatos Set busquedaFilaDatos = h2.Range(rangoBusqueda).Find(posicion, lookat:=xlWhole) If busquedaFilaDatos Is Nothing Then MsgBox "La posición ingresada no existe", vbCritical, "Resultado" Exit Sub Else filaRegistro = busquedaFilaDatos.Row If ActiveSheet.Name = "PICKING IN" Then h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) + cantidad Else h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) - cantidad End If End If Next 'Limpiar datos h1.Range("A5:B" & u).Value = "" MsgBox "Actualización Exitosa", vbInformation, "Resultado" Range("A5").Select End Sub
sal u dos
- Compartir respuesta