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:
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:
¿Podéis echarme una mano? Gracias.
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
Valora esta pregunta


0