Visual Basic.NET - Error en función

 
Vista:
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Error en función

Publicado por José Vicente (113 intervenciones) el 22/11/2021 16:38:46
Hola estoy intentado crear una función en la que modifico una hoja Excel pero me muestra el error:
1
2
Gravedad	Código	Descripción	Proyecto	Archivo	Línea	Estado suprimido	Estado suprimido
Error	BC30491	La expresión no genera un valor.	Tension 3.0	D:\Documentos\Proyecto_tensión\Tension 3.0\Tension 3.0\Form1.vb	695		Activo

Esto y intentando hacer que me modifique el Excel con un BackgroundWorker y por eso tengo la función.
El código de mi función es:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
Private Sub ActualizaExcel(ByVal anio As String)
 
        'ACTUALIZAMOS LA HOJA EXCEL
 
        exApp = New Excel.Application
        exLibro = exApp.Workbooks.Open("D:\Documentos\Escaneados\Informe_medico_infarto_2019\Tensión\Historico tension.xlsx")
        exHoja = DirectCast(exLibro.Sheets("Histórico tensión " & anio), Excel.Worksheet)
 
        Dim ultimaFila As Int16 = exHoja.Range("A1").End(Excel.XlDirection.xlDown).Row 'NÚMERO DE LA ÚLTIMA FILA CON DATOS
        Dim menorFecha As String = Format(exHoja.Range("$A$" & ultimaFila).Value, "dd/MM/yyyy") 'VALOR DE LA ÚLTIMA FECHA INSERTADA EN LA HOJA
        Dim rowIndex As Int16 = 0
        Dim primeraVacia As String = ("A" & ultimaFila + 1) 'PRIMERA FILA VACÍA
 
        'SELECCIONO LA PRIMERA CELDA VACÍA DESPUÉS DE LA ÚLTIMA FILA ESCRITA
 
        exHoja.Select()
        exHoja.Range(primeraVacia).Select()
 
        Dim actualizaSQL As String = "SELECT * FROM valores WHERE fecha > '" & menorFecha & "';"
 
        'ESTABLECEMOS CONEXIÓN CON POSTGRES
 
        If conexion.State = ConnectionState.Open Then
 
            conexion.Close()
 
        Else conexion.Open()
 
        End If
 
        Dim SQLadapter As New NpgsqlDataAdapter(actualizaSQL, conexion)
        Dim ds As New DataSet
 
        'RELLENAMOS EL DATASET Y AÑADIMOS REGISTROS AL EXCEL
 
        SQLadapter.Fill(ds)
 
        For i = 0 To ds.Tables(0).Rows.Count - 1 'RECORREMOS LAS FILAS DEL DATASET
 
            For j = 0 To ds.Tables(0).Columns.Count - 1 'RECORREMOS LAS COLUMNAS DEL DATASET
 
                exHoja.Cells(ultimaFila + 1, j + 1) = ds.Tables(0).Rows(i).Item(j) 'RELLENAMOS LAS CELDAS CON LOS NUEVOS VALORES
 
            Next
 
            ultimaFila += 1
 
        Next
 
        'FORMATEAMOS, GUARDAMOS Y CERRAMOS EL EXCEL
 
        exHoja.Rows.Item(1).Font.Bold = 1 'NEGRITA
        exHoja.Rows.Item(1).Font.ColorIndex = 41 'COLOR DEL ENCABEZADO
        exHoja.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO
 
        Dim objRango As Excel.Range = exHoja.Range(exHoja.Cells(1, 1), exHoja.Range("E1").End(Excel.XlDirection.xlDown))
        Dim contador As Integer = exHoja.Rows.Count
 
        objRango.Borders.LineStyle = 1 'BORDES DE LA HOJA
        objRango.HorizontalAlignment = 3 'ALINEADO DE LAS COLUMNAS
 
        exHoja.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
        exHoja.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE
        exHoja.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS
        exHoja.Range("A2:A367").Font.ColorIndex = 5 'COLOR DE LA FUENTE DE LA COLUMNA DE FECHAS
        exHoja.Range("A2:A367").Interior.Color = Color.White 'COLOR DEL FONDO DE LA COLUMNA FECHAS
        exHoja.Range("A2:A367").NumberFormat = "dd/mm/yyyy"
 
        'DAMOS FORMATO CONDICIONAL DE LAS CELDAS
 
        'FORMATO A COLUMNA DE FECHA
 
        Dim NCol As Integer = DataGridView1.ColumnCount
        Dim NRow As Integer = DataGridView1.RowCount
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 2 To NCol
 
                Dim FC As String = Chr(64 + Col) & Fila
                exHoja.Range(FC).Select()
                exHoja.Range(FC).Font.ColorIndex = 1
                exHoja.Range(FC).Font.Bold = True
 
            Next
 
        Next
 
        'FORMATO A COLUMNA SISTÓLICA
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 2 To NCol - 3
 
                Dim FC As String = Chr(64 + Col) & Fila
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value >= 14 Or exHoja.Range(FC).Value <= 9 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        'FORMATO A COLUMNA DIASTÓLICA
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 3 To NCol - 2
 
                Dim FC As String = Chr(64 + Col) & Fila
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 6 Or exHoja.Range(FC).Value >= 9 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        'FORMATO A COLUMNA PULSACIONES
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 4 To NCol - 1
 
                Dim FC As String = Chr(64 + Col) & Fila
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 50 Or exHoja.Range(FC).Value >= 82 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        'FORMATO A COLUMNA SATURACIÓN
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 5 To NCol
 
                Dim FC As String = Chr(64 + Col) & Fila
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 94 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        'ELIMINAMOS RESIDUOS DE VERSIONES ANTERIORES
 
        Dim lastRow As Long = exHoja.Range("A370").End(Excel.XlDirection.xlUp).Row
 
        exHoja.Range("A" & lastRow & ":E" & lastRow).Select()
        exHoja.Range("A" & lastRow & ":E367").Clear()
        exHoja.Range("F1:N367").Select()
        exHoja.Range("F1:N367").Clear()
 
        'ESCRIBIMOS LAS MEDIAS DE CADA COLUMNA
 
        lastRow += 1
 
        exHoja.Cells(lastRow, 1).Select()
        exHoja.Cells(lastRow, 1).Value = "MEDIAS: "
        exHoja.Cells(lastRow, 1).Font.ColorIndex = 32
        exHoja.Cells(lastRow, 1).Interior.Color = Color.Chartreuse
        exHoja.Cells(lastRow, 1).Font.Size = 12
        exHoja.Cells(lastRow, 1).Font.Name = "Adobe Garamond Pro Bold"
        exHoja.Cells(lastRow, 1).HorizontalAlignment = 3
        exHoja.Cells(lastRow, 2).FormulaLocal = "=REDONDEAR(PROMEDIO(B2:B" & lastRow - 2 & ");1)"
        exHoja.Cells(lastRow, 2).Font.Size = 12
        exHoja.Cells(lastRow, 2).Font.Name = "Adobe Garamond Pro Bold"
        exHoja.Cells(lastRow, 2).HorizontalAlignment = 3
        exHoja.Cells(lastRow, 3).FormulaLocal = "=REDONDEAR(PROMEDIO(C2:C" & lastRow - 2 & ");1)"
        exHoja.Cells(lastRow, 3).Font.Size = 12
        exHoja.Cells(lastRow, 3).Font.Name = "Adobe Garamond Pro Bold"
        exHoja.Cells(lastRow, 3).HorizontalAlignment = 3
        exHoja.Cells(lastRow, 4).FormulaLocal = "=REDONDEAR(PROMEDIO(D2:D" & lastRow - 2 & ");0)"
        exHoja.Cells(lastRow, 4).Font.Size = 12
        exHoja.Cells(lastRow, 4).Font.Name = "Adobe Garamond Pro Bold"
        exHoja.Cells(lastRow, 4).HorizontalAlignment = 3
        exHoja.Cells(lastRow, 5).FormulaLocal = "=REDONDEAR(PROMEDIO(E2:E" & lastRow - 2 & ");0)"
        exHoja.Cells(lastRow, 5).Font.Size = 12
        exHoja.Cells(lastRow, 5).Font.Name = "Adobe Garamond Pro Bold"
        exHoja.Cells(lastRow, 5).HorizontalAlignment = 3
 
        exHoja.Range("A" & lastRow & ":E" & lastRow).Borders.LineStyle = 1 'BORDES DE LA HOJA
        exHoja.Range("E1").End(Excel.XlDirection.xlDown).Select() 'SELECCIONAMOS LA ÚLTIMA CELDA DE LA COLUMNA E CON DATOS
 
        exLibro.Save()
        exLibro.Close()
        exApp.Quit()
 
        'ESTABLECEMOS EL % DE PROGRESO REALIZADO DEL TOTAL DE LA TAREA
 
        Dim n As Integer = exHoja.Range("A1").Rows.Count
 
        ProgressBar1.Maximum = n
 
        For count = 1 To n
 
            count += 1
            porcentaje_lbl.Text = count & "%"
 
            ProgressBar1.Value = count
 
        Next
 
        MessageBox.Show("HOJA ACTUALIZADA.", " ACTUALIZACIÓN EXCEL ", MessageBoxButtons.OK, MessageBoxIcon.None)
 
        ' LIMPIAMOS TODOS LOS PROCESOS DE EXCEL ABIERTOS DE LA MEMORIA
 
        Dim P As System.Diagnostics.Process
 
        Try
 
            For Each P In System.Diagnostics.Process.GetProcesses
 
                If P.ProcessName.ToUpper Like "*EXCEL*" Then
 
                    P.Kill()
 
                End If
 
            Next
 
        Catch
 
        End Try
 
        GC.WaitForPendingFinalizers()
        GC.Collect()
 
        conexion.Close()
 
    End Sub
¿Podéis echarme una mano? Gracias.
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