Necesito hacer un ciclo repetitivo en VB utilizando una hoja de Excel

Estimada ingeniera Elsa, le saludo cordialmente esperando que las actividades que realice sean culminadas con el éxito deseado.

Le comento que hace algún tiempo realicé un programa de control de presupuestos, claro, no se mucho sobre programación pero consultando en la web y con ayuda de un código que encontré logré modificarlo y hacer lo que necesitaba.

Pues el programa funciona a la perfección, solo evaluando un rango en la hoja de excel ejemplo:

A B C D E F

5 cuenta nombre cuenta valor mes proceso

6 1.1 Gasolina Q. 5.00 enero Salida

7

8

9

Usando el rango B6:F6, realiza la operación con facilidad, primero evalúa si hay alguna celda vacía, si es verdadero, despliega un mensaje de advertencia "llene todos los campos" luego si es igual a salia, va a otra hoja que es donde están la nomenclatura y revisa si la cuenta tiene disponibilidad, si es así, realiza la operación correspondiente.

Ahora resulta que necesito que eso mismo lo ejecute para las dos líneas de abajo

B7:F7 y también B8:F8, pero como podrá ver en el código solo tengo B6:F6

Después de 15 días no he logrado hacer que con un bucle, se evalúen y guarden los datos de las tres lineas.

El código:

Sub PRESUPUESTO()
Dim CATEGORÍA As String
Dim DESCRIPCIÓN As String
Dim CANTIDAD As Double
Dim MES As String
Dim CHEQUE As String
Dim PROVEEDOR As String
Dim REGIMENFISCAL As String
Dim CONTROLB As String


If Range("B6").Value = Empty Or _
Range("C6").Value = Empty Or _
Range("D6").Value = Empty Or _
Range("E6").Value = Empty Or _
Range("F6").Value = Empty Or _
Range("G6").Value = Empty Or _
Range("H6").Value = Empty Or _
Range("I6").Value = Empty Or _
Range("J6").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
CATEGORÍA = Range("C6").Value
DESCRIPCIÓN = Range("D6").Value
CANTIDAD = Range("E6").Value
MES = Range("F6").Value
CHEQUE = Range("G6").Value
PROVEEDOR = Range("H6").Value
REGIMENFISCAL = Range("I6").Value
CONTROLB = Range("J6").Value


Sheets("INVENTARIO").Select
Range("A:A").Select
For x = 1 To 80
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 = "SALIDA" Then
ActiveCell.Offset(0, 3).Select
presupuestoanterior = ActiveCell.Value
If presupuestoanterior < CANTIDAD Then
MsgBox "SIN PRESUPUESTO, LO SIENTO" & Chr(13) & "Sólo hay " & presupuestoanterior & " Quetzales.", vbOKOnly + vbCritical, "**Información de Presupuesto"
Sheets("PRINCIPAL").Select
Exit Sub
End If
presupuestonuevo = Val(ActiveCell.Value) - Val(CANTIDAD)
ActiveCell.Value = presupuestonuevo
Selection.End(xlToLeft).Select
MsgBox "Un Gasto por: " & VALOR & " " & DESCRIPCIÓN & ". La Cuenta" & Chr(13) & "Disminuyó de: " & presupuestoanterior & " a " & presupuestonuevo & " Quetzales.", vbOKOnly + vbInformation, "**Salidas"
Sheets("HISTORIAL").Select
Range("B1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = ID
ActiveCell.Offset(0, 1).Value = CATEGORÍA
ActiveCell.Offset(0, 2).Value = DESCRIPCIÓN
ActiveCell.Offset(0, 3).Value = CANTIDAD
ActiveCell.Offset(0, 4).Value = MES
ActiveCell.Offset(0, 5).Value = CHEQUE
ActiveCell.Offset(0, 6).Value = PROVEEDOR
ActiveCell.Offset(0, 7).Value = REGIMENFISCAL
ActiveCell.Offset(0, 8).Value = CONTROLB
fecha = Now()
ActiveCell.Offset(0, 9).Value = fecha
MsgBox "Registro exitoso en historial", vbOKOnly + vbInformation, "**Historial"
End If
End Sub

La idea es que al momento de darle un clic al botón procesar, descargue de las 3 lineas y no solo de una.

Saludos

1 respuesta

Respuesta
1

Considerando que se debe evaluar la cantidad, se hará línea x línea el pase a las variables, el control de cantidad y el pase luego a la hoja.

El bucle entonces empieza aquí:

Dim CONTROLB As String

For i = 6 to 9

If Range("B" & i).Value = Empty Or _
Range("C" & i).Value = Empty Or _

'seguir con el resto reemplazando 6 x i

Luego ajustá aquí:

'Le damos valores a las variables
ID = Range("B" & i).Value

'lo mismo para el resto de asignaciones

Ahora, ¿cada vez que se presente un error x cantidad debiera seguir con el resto? Si es así, en lugar de salir del proceso con Exit sub, lo debes enviar al siguiente valor del bucle:

MsgBox "SIN PRESUPUESTO, LO SIENTO" & Chr(13) & "Sólo hay " & presupuestoanterior & " Quetzales.", vbOKOnly + vbCritical, "**Información de Presupuesto"
Sheets("PRINCIPAL").Select
goto sigo
End If

Y antes del Next i colocás la entrada llamada, luego del End if

End If

sigo:

next i
End Sub

Armala, probala y comentame.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas