Visual Basic para Aplicaciones - CODIGO PARA INICIAR UN NUEVO CICLO

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Jesus Antonio
Val: 8
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

CODIGO PARA INICIAR UN NUEVO CICLO

Publicado por Jesus Antonio (2 intervenciones) el 24/08/2020 22:06:47
Estimados buenas tardes,

voy directo al grano, soy muy novato en eso de la programación y siguiendo uno que otro video-tutorial logré programar unas macros en V Basic para excel que sirven para almacenar y exportar en pdf los datos de unos recibos de pago de mi empresa, la [img1] es el recibo y la [img2] seria el historial de pagos. Básicamente el funcionamiento es así:

-Se ingresa la factura y el monto en un lado y en el otro el medio de pago y el monto, la macro agarra los datos de la factura y los copia en el historial el número de veces igual a la cantidad de formas de pago (en la [img2] tres medios de pago para 1 factura ya almacenados). Todo funciona correctamente con 1 sola factura a pagar (en mi ejemplo la FC 010), el problema que tengo es que cuando quiero pagar mas de un comprobante mi macros no toma en cuenta la sig fila (en la imagen 1 pueden ver que quiero pagar 2 comprobantes la Fc 010 y la NC 001), y la verdad no se como hacer eso sin repetir el mismo código 15 veces 1 por linea (para nada eficiente). Me gustaría que mi macro agarre los datos del sig comprobante (en este caso la NC 001) y repita los mismos de antes para almacenarlos en el historial de pagos y siga así hasta que no haya datos que guardar , de esa manera se con que medio se pago que factura, cuando y cuanto. Alguna sugerencia de como hacer eso? en verdad estoy perdido.

Adjunto el código de la macro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Sub GuardarOP()
 
Dim NombreHoja As String
Dim HojaDestino As Range
Dim NuevaFila As Integer
Dim FilasOP As Integer
Dim i As Integer
Dim j As Integer
Dim NumOP As Integer
Dim NombrePDF, RutaArchivo As String
 
NombreHoja = "PAGOS"
FilasOP = Application.WorksheetFunction.CountA(Range("OP[NºCHEQUE]"))
NumOP = ThisWorkbook.Sheets("OPs").Range("C5").Value
 
With ThisWorkbook.Sheets(NombreHoja)
 
    For i = 1 To FilasOP
        Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
        NuevaFila = HojaDestino.Rows.Count + 1
        .Cells(NuevaFila, 1).Value = NumOP
        .Cells(NuevaFila, 2).Value = Date
        .Cells(NuevaFila, 3).Value = Range("codproveedor").Value
        .Cells(NuevaFila, 4).Value = Range("proveedor").Value
        .Cells(NuevaFila, 5).Value = Range("Factura").Value
        .Cells(NuevaFila, 6).Value = Range("ImpFactura").Value
            For j = 4 To 6
                .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("OPs").Cells(11 + i, j + 1)
            Next j
    Next i
 
End With
 
    NombrePDF = "OP " & Range("C5").Value
    RutaArchivo = "C:\OPs Generadas" & "\" & NombrePDF & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
 
MsgBox "Exito al exportar y guardar", vbInformation, "FG CONSTRUCTORA CIVIL SA"
 
End Sub

img1
img2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

CODIGO PARA INICIAR UN NUEVO CICLO

Publicado por Antoni Masana (498 intervenciones) el 25/08/2020 13:42:48
No entiendo que es lo que estas haciendo.

Padece que las tres filas de la imagen inferior las trasladas a la imagen superior. Y el NC 001 y el importe de -5000 ¿De donde sale? o ¿es al revés?.

¿Cual es la hoja PAGOS?
¿Cual es la hoja activa?

Sube un libro de ejemplo.

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jesus Antonio
Val: 8
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

CODIGO PARA INICIAR UN NUEVO CICLO

Publicado por Jesus Antonio (2 intervenciones) el 26/08/2020 21:49:30
Estimado buenas tardes, muchas gracias por su intervención. El recibo seria la primera imagen. Ahí es donde lleno los datos (para luego imprimirlos), pero también quiero tener un registro digital de todos los pagos que hago con la empresa. Entonces, los datos llenados en la OP (Orden de Pago) o recibo son los que se copian a la 2da imagen o Historial que en este caso la hoja se llama PAGOS. Subo mi archivo a ver si el libro es mejor explicándolo que yo. Para que la macros guardar y exportar funcione bien debe existir una carpeta en la unidad C:/OPs generadas que es donde se guarda el PDF.

Muchas gracias de antemano.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

CODIGO PARA INICIAR UN NUEVO CICLO

Publicado por Antoni Masana (498 intervenciones) el 27/08/2020 11:51:20
No entiendo que es cada cosa ni que quieres hacer.

Deberías explicar las diferentes entradas en la hoja OPs y que resultados deben dar en la hoja PAGOS.
Y cuales son el problema y cuales no.

Ejecuto la macro y no se si lo que hace es lo que debe hacer o no es es lo que debe hacer, que hace bien o que hace mal.

Las macros así son más agradables de leer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Sub GuardarOP()
    Dim NombreHoja As String
    Dim HojaDestino As Range
    Dim NuevaFila As Integer
    Dim FilasOP As Integer
    Dim i As Integer
    Dim j As Integer
    Dim NumOP As Integer
    Dim NombrePDF, RutaArchivo As String
 
    NombreHoja = "PAGOS"
    FilasOP = Application.WorksheetFunction.CountA(Range("OP[NºCHEQUE]"))
    NumOP = ThisWorkbook.Sheets("OPs").Range("C5").Value
 
    With ThisWorkbook.Sheets(NombreHoja)
        For i = 1 To FilasOP
            Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
            NuevaFila = HojaDestino.Rows.Count + 1
            .Cells(NuevaFila, 1).Value = NumOP
            .Cells(NuevaFila, 2).Value = Date
            .Cells(NuevaFila, 3).Value = Range("codproveedor").Value
            .Cells(NuevaFila, 4).Value = Range("proveedor").Value
            .Cells(NuevaFila, 5).Value = Range("Factura").Value
            .Cells(NuevaFila, 6).Value = Range("ImpFactura").Value
            For j = 4 To 6
                .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("OPs").Cells(11 + i, j + 1)
            Next j
        Next i
    End With
 
    NombrePDF = "OP " & Range("C5").Value
    RutaArchivo = "C:\OPs Generadas" & "\" & NombrePDF & ".pdf"
    ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=RutaArchivo, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=False
 
    MsgBox "Exito al exportar y guardar", vbInformation, "FG CONSTRUCTORA CIVIL SA"
End Sub
 
Sub NUEVAOP()
    '
    ' NUEVAOP Macro
    ' BORRA LOS DATOS PREVIAMENTE INTRODUCIDOS
    '
 
    '
    Dim Respuesta As Integer
 
    Respuesta = MsgBox("¿Deseas llenar una nueva Orden de pago?", vbYesNo, "FG CONSTRUCTORA CIVIL SA")
    If Respuesta = vbYes Then
        With ThisWorkbook.Sheets("OPs")
            .Range("codproveedor").ClearContents
            .Range("B12:g21").ClearContents
            .Range("E5").ClearContents
            ActiveCell.FormulaR1C1 = "¿PROVEEDOR?"
            Range("D6:G7").Select
        End With
    End If
End Sub
 
Sub BUSCAR_PROVEEDOR()
    Proveedores.Show
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar