Visual Basic para Aplicaciones - necesaria expresion constante

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

necesaria expresion constante

Publicado por Albert (204 intervenciones) el 11/02/2019 14:59:29
buenos días, adjunto un archivo en el que estoy trabajando y que me da dos errores os lo explico en el form, pero básicamente es que al clicar en uno de los botones me sale "es necesaria una expresión de constante" y en el otro, que debe de sumar por cif y año solo consigo que lo haga por el año actual.
Gracias por vuestro tiempo
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

necesaria expresion constante

Publicado por Antoni Masana (498 intervenciones) el 12/02/2019 08:09:36
Seria de agradecer decir en que botón esta el error en el comentario y no en el libro, no lo había visto.

Incluso poner el código del error. Que es este.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub UserForm_Initialize()
    Dim AÑO As Date
    Dim SumasF(AÑO) As Double
 
    Sheets("entradas").Select
    ' --- Acumulamos
    For x = 4 To Entradas.Range("s" & Rows.Count).End(xlUp).Row
        AÑO = Year(Entradas.Range("s" & x))
        'Totales años
        SumasF(AÑO) = SumasF(AÑO) + Range("R" & x)
    Next
    ' --- Totales mes a formulario
    For y = 2009 To 2021 'aqui nombre del textform F+año
        If Not SumasF(x) = 0 Then
           Controls("F" & y) = FormatNumber(SumasF(x))
        End If
    Next
 
End Sub

En que estarías pensando para hacer tal disparate.

Te explico:

Defines una variable AÑO con formato fecha, bien.
Defines una variable SumasF que sera una tabla o array con formato Double y con la la cantidad de elementos ....¿?

¿Que valor tiene AÑO si la acabas de definir?
¿La dimensión de la tabla en formato fecha?
Si la variable AÑO es para tener un valor de año ¿Por que la defines como DATE y no como Integer? que parece más razonable.

La dimensiones de las tablas, matriz o array en VBA se definen por un número entero positivo que va de 0 a lo que permita.


Hay varias formas de hacerlo:

1 - Definir 100 Elementos del año 2000 al 2100 y año restarle 2000 para acceder a la tabla

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub UserForm_Initialize()
    Dim AÑO As Date
    Dim SumasF(100) As Double
 
    Sheets("entradas").Select
    ' --- Acumulamos
    For x = 4 To Entradas.Range("s" & Rows.Count).End(xlUp).Row
        AÑO = Year(Entradas.Range("s" & x))-2000
        'Totales años
        SumasF(AÑO) = SumasF(AÑO) + Range("R" & x)
    Next
    ' --- Totales mes a formulario
    For y = 9 To 21 'aqui nombre del textform F+año
        If Not SumasF(x) = 0 Then
           Controls("F" & y) = FormatNumber(SumasF(x))
        End If
    Next
End Sub


2 - Delimitar el rango de la tabla a los elementos del 2000 al 2100

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub UserForm_Initialize()
    Dim AÑO As Date
    Dim SumasF(2000 to 2100) As Double
 
    Sheets("entradas").Select
    ' --- Acumulamos
    For x = 4 To Entradas.Range("s" & Rows.Count).End(xlUp).Row
        AÑO = Year(Entradas.Range("s" & x))
        'Totales años
        SumasF(AÑO) = SumasF(AÑO) + Range("R" & x)
    Next
    ' --- Totales mes a formulario
    For y = 2009 To 2021 'aqui nombre del textform F+año
        If Not SumasF(x) = 0 Then
           Controls("F" & y) = FormatNumber(SumasF(x))
        End If
    Next
End Sub


Y el otro problema: "ue debe de sumar por cif y año solo consigo que lo haga por el año actual.

No se donde esta.


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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

necesaria expresion constante

Publicado por Albert (204 intervenciones) el 12/02/2019 09:32:34
Disculpa, crei que se veía bien en el form los botones de error, el que te falta es el "415", me acaban de dar una noticia, me tengo que ir a la península hasta el 22/2 (por trabajo claro) así que no podre hacer las modificaciones que me indicas hasta entonces.
Mil gracias de corazón, te lo agradezco sinceramente.
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 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

necesaria expresion constante

Publicado por Antoni Masana (498 intervenciones) el 12/02/2019 11:34:32
El problema de las fechas es un poco más complejo.

Al llamar el textBox99 del formulario Usf_Gastos, provoca una llamada el formulario y hace que se ejecute el evento de inicialización lo que hace que se inicialicen todos los TextBox y no puedas leer la fecha.

Como el la hoja Inicio queda oculta podrías guardar los datos según se introducen en celdas, tambien y seria lo más profesional evitar que se ejecuten los eventos. cuando no se deben ejecutar.

Otra opción es que el al ejecutar el boton copie las fechas a la hoja

1
2
3
4
5
6
Private Sub CommandButton129_Click()
    Sheets("415").Range("H1") = TextBox99.Text
    Sheets("415").Range("I1") = TextBox100.Text
    Unload Me
    Call Resumen.Resumen
End Sub

Y después en la Macro RESUMEN

1
2
3
4
5
6
Sub Resumen()
    ...
    datamenor = CDate(R.Range("H1"))
    datamayor = CDate(R.Range("I1"))
 
'busco los datos

Espero esto te ayude.

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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

necesaria expresion constante

Publicado por albert (204 intervenciones) el 01/03/2019 17:12:54
Gracias por tu respuesta, antoni, la solución para el 415 funciona perfectamente, el de la suma por año no te puedo decir por que me da el "error 9 , subíndice fuera del intervalo" que si no me equivoco es que no existe algun objeto pero no veo cual es por mas que he probado.
Repito mil gracias
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