
Error en función
Publicado por anonymous (114 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 EXCELexApp = 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 = 0Dim primeraVacia As String = ("A" & ultimaFila + 1) 'PRIMERA FILA VACÍA
'SELECCIONO LA PRIMERA CELDA VACÍA DESPUÉS DE LA ÚLTIMA FILA ESCRITAexHoja.Select()
exHoja.Range(primeraVacia).Select()
Dim actualizaSQL As String = "SELECT * FROM valores WHERE fecha > '" & menorFecha & "';"
'ESTABLECEMOS CONEXIÓN CON POSTGRESIf 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 EXCELSQLadapter.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 EXCELexHoja.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 FECHADim 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 NColDim 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ÓLICAFor 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ÓLICAFor 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 PULSACIONESFor 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ÓNFor Fila As Integer = 2 To NRow + 1
For Col As Integer = 5 To NColDim 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 ANTERIORESDim 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 COLUMNAlastRow += 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 TAREADim n As Integer = exHoja.Range("A1").Rows.Count
ProgressBar1.Maximum = n
For count = 1 To ncount += 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 MEMORIADim 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