Visual Basic.NET - ¿Como puedo generar nuevas hojas a libro Excel con VB.net?

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

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por José Vicente (57 intervenciones) el 19/10/2020 09:26:54
Hola, buenos días, tengo un aplicacion que genera un libro Excel y dentro de él llego a generar una hoja aparte de la primera, pero a partir de ahí ya nada, al intentar generar otra me borra la anterior, la deja en blanco y crea una tercera mezcla de la que ha borrado y la nueva.
¿Cómo lo puedo solucionar?. Gracias.
Mi código 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
Private Sub Guarda_btn_Click(sender As Object, e As EventArgs) Handles Guarda_btn.Click
 
        valor = CStr(fechaIni_tb.Text) 'GUARDAMOS LA PRIMERA FECHA COMO STRING
        fin = CStr(fechaFin_tb.Text) 'GUARDAMOS LA ÚLTIMA FECHA COMO STRING
 
        Dim fecha1, fecha2 As Date
        fecha1 = Date.Parse(valor)
        fecha2 = Date.Parse(fin)
 
        Dim numHojas As Int16
 
        dias = DateDiff(DateInterval.Day, fecha1, fecha2)
 
        numero = valor.Substring(valor.IndexOf("/") + 1, valor.LastIndexOf("/") - 3) 'EXTRAEMOS EL NÚMERO DE MES
        mes = MonthName(numero, True) 'LE PONEMOS NOMBRE AL MES
 
        exApp = New Application
 
        exApp.Workbooks.Open(archivo) 'ABRIMOS EL LIBRO
 
        exApp.Visible = True
        numHojas = exApp.Sheets.Count 'CONTAMOS LAS HOJAS DEL LIBRO
 
        exApp.Range("A1").Select()
 
        exApp.ActiveSheet.Select
 
        Dim PrimeraCell As String = ""
        Dim RangoSeleccionado As String = ""
 
        Dim NumCol As Integer = 0
        Dim NumRow As Integer = 0
        Dim TotalNumCol As Integer = 0
        Dim TotalNumRow As Integer = 0
 
        If exApp.Selection.Find(valor) Is Nothing Then
 
            MessageBox.Show("ERROR. NO HAY SELECCIONADO NADA.", "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
            exApp.Workbooks.Close()
            exApp.Quit()
            exHoja = Nothing
            exLibro = Nothing
            exApp = Nothing
 
            Exit Sub
 
        Else
 
            exApp.Selection.Find(valor).Select()
 
            PrimeraCell = exApp.ActiveCell.Address
 
            NumCol = exApp.ActiveCell.Column
            NumRow = exApp.ActiveCell.Row
 
            TotalNumRow = exApp.ActiveSheet.UsedRange.Rows.Count
            TotalNumCol = exApp.ActiveSheet.UsedRange.Columns.Count
 
        End If
 
        With exApp
 
            exApp.Worksheets.Add(After:=exApp.Worksheets(1))  ' EL AFTER ES PARA EVITAR CONFUNDIR LAS HOJAS
 
            exApp.Worksheets(1).Select()
 
            If fechaFin_tb.Text = fechaIni_tb.Text Then
 
                ' SELECCIONAMOS DESDE LA FECHA DESEADA HASTA EL FINAL
 
                RangoSeleccionado = PrimeraCell & ":" & Chr(64 + TotalNumCol - NumCol + 1) & TotalNumRow
 
            Else
 
                ' SELECCIONAMOS EL RANGO DESDE LA FECHA DESEADA
 
                RangoSeleccionado = PrimeraCell & ":" & Chr(64 + TotalNumCol - NumCol + 1) & (NumRow + dias)
 
            End If
 
            .ActiveSheet.Range(RangoSeleccionado).Select()
            .Selection.Copy  ' COPIAMOS EL CONTENIDO
            .ActiveWorkbook.Sheets(numHojas + 1).Select()
            .ActiveSheet.Name = mes ' LE CAMBIAMOS EL NOMBRE
 
            .ActiveSheet.Range("A2").Insert()
 
            .ActiveSheet.Rows.Item(1).Font.Bold = 1 'NEGRITA
            .ActiveSheet.Rows.Item(1).Font.ColorIndex = 49 'COLOR DEL ENCABEZADO
            .ActiveSheet.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO
 
            .ActiveSheet.Range("A1").Value = "   FECHA   "
            .ActiveSheet.Range("B1").Value = "  SISTÓLICA  "
            .ActiveSheet.Range("C1").Value = "  DIASTÓLICA  "
            .ActiveSheet.Range("D1").Value = "  PULSACIONES  "
            .ActiveSheet.Range("E1").Value = "  SATURACIÓN  "
 
            .ActiveSheet.Range("A1:E1").Borders.LineStyle = 1
 
            .ActiveSheet.Rows.Item(1).AutoFit()
 
            .ActiveSheet.Range("A1:E1").Cells.Interior.Color = Color.Cyan
            .ActiveSheet.Range("A2:E70").HorizontalAlignment = 3
 
            .ActiveSheet.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
            .ActiveSheet.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE
            .ActiveSheet.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS
 
            .ActiveSheet.Range("A2:A367").Font.ColorIndex = 5 'COLOR DE LA FUENTE DE LA COLUMNA DE FECHAS
 
            .ActiveSheet.Range("E1").End(Excel.XlDirection.xlDown).Select() 'SELECCIONAMOS LA ÚLTIMA CELDA CON DATOS HOJA2
            .ActiveWorkbook.Sheets(1).Select() 'SELECCIONAMOS LA HOJA 1 DEL LIBRO MODIFICADO
            .ActiveSheet.Range("E1").End(Excel.XlDirection.xlDown).Select() 'SELECCIONAMOS LA ÚLTIMA CELDA CON DATOS HOJA1
 
            If System.IO.File.Exists(archivo) = True Then
 
                'SI EL ARCHIVO EXISTE LO BORRAMOS Y GUARDAMOS EL NUEVO
 
                File.Copy(archivo, archivo_ltl, True)
 
                System.IO.File.Delete(archivo_ltl)
 
            Else
 
                'SI NO EXISTE LO GUARDAMOS
 
                exLibro.SaveAs(archivo)
 
            End If
 
            .ActiveWorkbook.Save() ' GRABAMOS LOS CAMBIOS EN EL LIBRO
            exApp.Workbooks.Close()
            exApp.Quit()
 
        End With
 
        exHoja = Nothing
        exLibro = Nothing
        exApp = Nothing
 
        Dim P As System.Diagnostics.Process   ' CERRAMOS TODOS LOS PROCESOS DE EXCEL ABIERTOS
 
        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()
 
        MessageBox.Show("FICHERO MODIFICADO Y GUARDADO", "PERFECTO.", MessageBoxButtons.OK, MessageBoxIcon.Information)
 
    End Sub
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 Sam
Val: 43
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por Sam (12 intervenciones) el 19/10/2020 12:17:30
Hola,

Si entiendo bien tu código, debes cambiar las líneas 64, 66 y 84 :

1
2
3
4
5
6
 ' 64 y 66
           Dim NumeroHoja As Integer = XLSAPP.Worksheets.Count
            exApp.Worksheets.Add(After:=XLSAPP.Worksheets(NumeroHoja))
            exApp.Worksheets(1).Select()
' 84
             .ActiveWorkbook.Sheets(NumeroHoja+1).Select()

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

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por José Vicente (57 intervenciones) el 19/10/2020 12:31:57
Hola, gracias, estaba un poco ofuscado y no lo veía por ningún sitio. Muchas 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 Sam
Val: 43
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por Sam (12 intervenciones) el 19/10/2020 17:09:14
Perdón para mi error.
He tenido códigos dados por Phil Rob en tu discusión anterior “¿Cómo selecciono un rango de celdas Excel por valores en vb.net?” y dentro otros discusiones, y otros ejemplos.
Este es la razon por que he escrito tu variable exApp y ella de Phil XLSApp.
El codigo correcto es :
1
2
3
4
5
6
7
8
9
10
11
 ' 64 y 66
 
           Dim NumeroHoja As Integer =  exApp.Worksheets.Count
 
            exApp.Worksheets.Add(After:= exApp.Worksheets(NumeroHoja))
 
            exApp.Worksheets(1).Select()
 
' 84
 
             .ActiveWorkbook.Sheets(NumeroHoja+1).Select()
Gracias para dice me 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
1
Comentar
sin imagen de perfil
Val: 165
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por José Vicente (57 intervenciones) el 19/10/2020 22:15:42
Funciona. 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
sin imagen de perfil
Val: 165
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Como puedo generar nuevas hojas a libro Excel con VB.net?

Publicado por José Vicente (57 intervenciones) el 19/10/2020 12:45:47
Falsa alarma.
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