Visual basic y excel

Te paso a comentar, desde visual Basic exporto unos 10000 registros a una planilla de excel, una vez que fueron exportados combino las celdas que son iguales, el problema es que se cuelga cuando esta combinando.

2 Respuestas

Respuesta
1
Pues está raro, porque debería colgarse al exportar por tanta cantidad de registros, si gustas mandame el código de la parte donde combines los datos, supongo que usas un ciclo para recorrer todos los registros e irlos uniendo, tal vez pudieras probar poniendo la instrucción DoEvents dentro de cada ciclo para así darle un respiro a tu sistema, claro, yo no he probado con tantos registros, francamente desconozco que tanta sea la capacidad de excel (a la mejor pudiera ser por ahí parte del problema), pero con las cantidades de registros y poniendo la isntrucción, tardaba pero el sistema respondía en todo momento.
Manuel ([email protected])
For J = IndiceInicial To IndiceFinal - 1 'recorro las columnas
Columna = ColumnasMerge(J)
Fila = IntPosicionFila
For i = 0 To CantidadFilas
If Bandera = 1 Then
valorinicial = Fila
Bandera = 0
End If
If .Cells(Fila, Columna + IntPosicionColumna).Value <> .Cells(Fila + 1, Columna + IntPosicionColumna).Value Then
If i <> 0 Then
Bandera = 1
.Range(.Cells(valorinicial, Columna + IntPosicionColumna), .Cells(Fila, Columna + IntPosicionColumna)).merge
Else
valorinicial = valorinicial + 1
End If
End If
Fila = Fila + 1
Next
Next
Antes que nada disculpa tanta tardanza, pero en verdad que no había tenido tiempo de responder.
Pues mira, yo hice la prueba usando otras funciones, tal vez no sea exactamente lo que me pides, pero bueno, también soy nuevo en esto de manejar objetos de excel, lo que hice fue recorrer mediante un ciclo los 10000 registros y suponiendo que la hoja tenga dos columnas, leo cada una de ellas y las guardo en una variable, concateno las dos cadenas y lo guardo en un segundo libro, hasta ahí, tal vez como mejora se pudiera hacer que una vez llenado el segundo libro, se borre el primero y se renombre al segundo con el nombre del primero y listo, ademas de usar arreglos y ciclos para recorrer todas las columnas, en lugar de dejarlo solo para dos.
Ahora: si hay un problema que me saltó, y es que se ciclan varios programas al finalizar, en este caso durante la lectura y union de las celdas funciona perfectamente, es decir la ventana responde a todos los eventos, pero tan pronto termina y se escribe el nuevo libro se me cicla excel (aunque no lo tenga abierto), el propio ide de visual basic y el explorer de windows, teniendo que reiniciar.
Lo que yo supongo es que es demasiado esfuerzo para el sistema, son 10000 registros y es un hecho que las aplicaciones Microsoft no son precisamente óptimas, por lo que si le tiras a lo grande pues seguramente te van a dar problemas, supongo que es ese el problema, no se.
No se que estas haciendo, pero si es algo relacionado a base de datos, o pretendes mejor usar excel como sustituto de base de datos, y para algo muy grande mejor te recomiendo bases de datos más poderosas, usa oracle o sql server, mysql, etc.
Bueno pues suerte y disculpa que no te pueda ayudar más, te paso el código a ver si te sirve de algo.
Private Sub Command1_Click()
Dim ApExcel As Object
Dim ApLibro1 As Object
Dim ApLibro2 As Object
Set ApExcel = CreateObject("Excel.application")
Set ApLibro1 = ApExcel.WorkBooks.Open(App.Path + "Prueba1.xls")
Set ApLibro2 = ApExcel.WorkBooks.Add
ApExcel.Visible = False
Dim i As Integer
Dim cadena1, cadena2, cadena As String
For i = 1 To 10000
DoEvents
cadena1 = ApLibro1.Worksheets(1).cells(i, 1).Formula
cadena2 = ApLibro1.Worksheets(1).cells(i, 2).Formula
cadena = cadena1 + "," + cadena2
ApLibro2.Worksheets(1).cells(i, 1).Formula = cadena
Me.Caption = "Fusionando celda " + Str(i) + " de 10000"
Next
ApLibro2.SaveAs App.Path & "Prueba2.xls"
ApLibro1.Close
ApLibro2.Close
ApExcel.Quit
Set ApLibro1 = Nothing
Set ApLibro2 = Nothing
Set ApExcel = Nothing
Me.Caption = "Listo"
End Sub
Respuesta
1
Eso puede suceder por la cantidad de registros que quieres combinar, ¿qué version de office estas usando?
Yo te recomendaría actualizar el office, o usar el más actual.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas