Visual Basic.NET - Fallo en código de botó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

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 31/08/2021 12:13:02
Hola, tengo un botón en el que quiero actualizar una hoja Excel desde un Datagridview enlazado con una Bd.
El código que tengo hasta ahora 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
Private Sub actualiza_btn_Click(sender As Object, e As EventArgs) Handles actualiza_btn.Click
 
        Dim cadenaConexion As String = "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= C:\Users\joviz\Desktop\Historico tension.xlsx;" & "Extended Properties=Excel 12.0 Xml;HDR=YES;"
        Dim anio As Int16 = Now.Year
 
        DataGridView1.CurrentCell = DataGridView1.Rows(DataGridView1.RowCount - 2).Cells(0)
 
        exLibro = exApp.Workbooks.Open("C:\Users\joviz\Desktop\Historico tension.xlsx")
        exHoja = exLibro.Worksheets("Histórico tensión " & anio & ".xlsx")
        exHoja.Select()
 
        Dim valorCelda As Date = DataGridView1.SelectedRows(0).Cells(0).Value
        Dim menorFecha As Date = exHoja.Range("A1").End(Excel.XlDirection.xlDown).Value
 
        Try
 
            ' ESTABLECEMOS CONEXION CON EL LIBRO EXCEL
 
            Using con As New OleDbConnection(cadenaConexion)
 
                ' CREAMOS UN COMANDO
 
                Dim cmd As OleDbCommand = con.CreateCommand()
 
                ' ESPECIFICAMOS UNA CONSULTA INSERT INTO CON PARÁMETROS POR POSICIÓN.
 
                cmd.CommandText = "INSERT INTO [Hoja1$] SELECT * FROM valores WHERE fecha >" & menorFecha & ";"
 
 
                ' Añadimos los parámetros en el mismo orden en el que
                ' se encuentran especificados los campos en la consulta
                ' SQL de datos añadidos (INSERT INTO)
                '
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(0).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(1).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(2).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(3).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(4).Value)
 
                ' ABRIMOS LA CONEXIÓN
 
                con.Open()
 
                ' EJECUTAMOS LA CONSULTA
 
                cmd.ExecuteNonQuery()
 
            End Using
 
        Catch ex As Exception
 
            ' SI HAY ERROR MOSTRAMOS EL MENSAJE
 
            MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        End Try
 
    End Sub
En exHoja = exLibro.Worksheets("Histórico tensión " & anio & ".xlsx") me falla por lo que no piedo comprobar si el resto del código está bien, aunque creo que en la query también fallará. ¿Podéis echarle un ojo y darme una solución? 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
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por melqui (242 intervenciones) el 31/08/2021 18:03:05
josé, tu codigo esta difiicl de entender

tente separar pasando parametro porque no está haciendo sentido.
1
DataGridView1.CurrentCell = DataGridView1.Rows(DataGridView1.RowCount - 2).Cells(0)

Screenshot_11

tu quieres cargar tu excel para el datagridy despues repassar a la base de datos?
mas para adicionar primero carga los datos del excel para datagrid despues haga un loop para insertar en la base de datos
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 31/08/2021 18:12:16
Hola, gracias por tu respuesta. No, lo que quiero es actualizar la hoja Excel, el DatagridView lo lleno desde una Bd y lo que pretendo es actualizar la hoja Excel con los nuevos registros que añada a la Bd y al DatagridView.
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 Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 02/09/2021 20:54:10
Hola:

He visto lo siguiente (que no digo que sea, porque no tengo todo el código, pero...):

Aquí abres el libro:
1
exLibro = exApp.Workbooks.Open("C:\Users\joviz\Desktop\Historico tension.xlsx")

Aquí referencias a la hoja:
1
exHoja = exLibro.Worksheets("Histórico tensión " & anio & ".xlsx")

Pero, ¿la hoja tiene ese nombre con extnesión xlsx? Raro, ¿no?
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 02/09/2021 21:11:07
Hola. Sí, tiene ese nombre porque todos los años genero una hoja nueva y extraigo el año de la fecha para añadirlo al nombre de la hoja.
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 Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 03/09/2021 21:59:03
Hola:

Cambiando esta línea:

1
exHoja = exLibro.Worksheets("Histórico tensión " + anio.ToString + ".xlsx")

A mi sí me funciona, siempre que la hoja exista. Si ves que te sigue dando error.coméntalo por aquí.

Un saludo.
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 04/09/2021 11:49:03
No me ha funcionado, el error que muestra es:

Error

Así queda el código con tu propuesta:
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
Private Sub actualiza_btn_Click(sender As Object, e As EventArgs) Handles actualiza_btn.Click
 
        Dim rutaHoja As String = "C:\Users\joviz\Desktop\Historico tension.xlsx"
        Dim cadenaConexion As String = "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= C:\Users\joviz\Desktop\Historico tension.xlsx;" & "Extended Properties=Excel 12.0 Xml;HDR=YES;"
        Dim anio As Int16 = Now.Year
 
        DataGridView1.CurrentCell = DataGridView1.Rows(DataGridView1.RowCount - 2).Cells(0)
 
        exLibro = exApp.Workbooks.Open("C:\Users\joviz\Desktop\Historico tension.xlsx")
        exHoja = exLibro.Worksheets("Histórico tensión " + anio.ToString + ".xlsx")
        exHoja.Select()
 
        Dim valorCelda As Date = DataGridView1.SelectedRows(0).Cells(0).Value
        Dim menorFecha As Date = exHoja.Range("A1").End(Excel.XlDirection.xlDown).Value
 
        Try
 
            ' ESTABLECEMOS CONEXION CON EL LIBRO EXCEL
 
            Using con As New OleDbConnection(cadenaConexion)
 
                ' CREAMOS UN COMANDO
 
                Dim cmd As OleDbCommand = con.CreateCommand()
 
                ' ESPECIFICAMOS UNA CONSULTA INSERT INTO CON PARÁMETROS POR POSICIÓN.
 
                cmd.CommandText = "INSERT INTO [Hoja1$] SELECT * FROM valores WHERE fecha >" & menorFecha & ";"
 
                ' Añadimos los parámetros en el mismo orden en el que
 
                ' se encuentran especificados los campos en la consulta
 
                ' SQL de datos añadidos (INSERT INTO)
 
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(0).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(1).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(2).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(3).Value)
                cmd.Parameters.AddWithValue("", DataGridView1.CurrentRow.Cells(4).Value)
 
                ' ABRIMOS LA CONEXIÓN
 
                con.Open()
 
                ' EJECUTAMOS LA CONSULTA
 
                cmd.ExecuteNonQuery()
 
            End Using
 
        Catch ex As Exception
 
            ' SI HAY ERROR MOSTRAMOS EL MENSAJE
 
            MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        End Try
 
    End Sub
Espero que puedas ayudarme, 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
Imágen de perfil de Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 04/09/2021 16:05:37
Hola:

¿Pero exista la hoja que se quiere abrir en el libro? Si la hoja no existe, da error.
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 04/09/2021 17:49:49
Hola, si, por supuesto:

Captura_1
Captura_2

y sigue dando el mismo error:

Error
¿Qué puedo hacer?
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 Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 04/09/2021 22:41:04
Perdona, no sé si hablamos de los mismo:

El libro de Excel es "Historico tension.xlsx", pero me temo que la hoja no se llama "Historico tension 2021.xlsx" sino "2021" (Mira la imagen adjunta)
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 04/09/2021 22:52:30
Como puedes ver , sí se llama Histórico tensión 2021
Captura_3
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 Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 04/09/2021 23:48:58
Perdona, por si no me he explicado bien. La hoja se llama "Histórico tensión 2021", pero no "Histórico tensión 2021.xlsx" que es lo que indicas en el código.

1
exHoja = exLibro.Worksheets("Histórico tensión " + anio.ToString + ".xlsx")

Cámbialo por:

1
exHoja = exLibro.Worksheets("Histórico tensión " + anio.ToString)

Y me dices si funciona.
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: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por José Vicente (113 intervenciones) el 05/09/2021 07:12:37
Hola, me devuelve este error:

Captura_4
¿Qué me falta ahora?
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 Santiago
Val: 17
Ha disminuido su posición en 72 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Fallo en código de botón

Publicado por Santiago (27 intervenciones) el 05/09/2021 14:08:14
Ahora el error se debe estar produciendo en:

1
Using con As New OleDbConnection(cadenaConexion)

Porque estás tratando de abrir un libro de Excel como si fuera una base de datos.

Como veo que esto se alarga y me temo que tienes lagunas bastante grandes (no sé cuánto sabes, pero tienes errores muy básicos) veo dos opciones:

1.- Escribe en un documento lo que quieres hacer con detalle. Me envías el código que tienes en un zip y el documento y reviso todo.
2.- Hacemos un Skype, Teams o lo que quieras y charlamos, que es más rápido.

Ya me dices.
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