Ordenar datos dentro del msflexgrid

Me gustaría poder ordenar unos datos numéricos que tengo en las celdas del msflexgrid.
Los datos son cifras económicas de los estados de la república Mexicana. La idea es esta " Tengo unas bases de datos que las jalo de excel, las llevo al msflexgrid para poder realizar operaciones entre ellas y así poder generar otras bases. El propósito de esto es que con los datos que son numéricos, los pueda ordenar de mayor a menor y de menor a mayor. Para ya después de haberlos ordenados; en el mapa de la división política de los estados de la República mexicana pueda iluminar al estado que se encuentra con la cifra más alta de un color por decir rojo intenso; con un color rojo no tan intenso al que tenga la cifra por debajo del primero y así sucesivamente. Hasta que el color del último, es decir con la menor cifra lo ilumine con un color rojo transparente o blanquizco.
Espero tu respuesta lo más pronto que puedas te envío un ejemplo como hago las operaciones y las vacío al msflexgrid.
Public Sub OPERACIONES()
Dim R, C As Integer
msfgBaseDatos.Refresh
Call estado
Call anual
C = msfgBaseDatos.Cols
R = msfgBaseDatos.Rows
msfgBaseDatos.Clear
ReDim RESULTADO(1 To R, 1 To C) As String
For h = añoi To añof
For j = edoi To edof
Select Case opera
Case "Suma"
RESULTADO(j, h) = Val(ARREGLO1(j, h)) + Val(ARREGLO2(j, h))
Case "Resta"
RESULTADO(j, h) = Val(ARREGLO1(j, h)) - Val(ARREGLO2(j, h))
Case "Multiplicación"
RESULTADO(j, h) = Val(ARREGLO1(j, h)) * Val(ARREGLO2(j, h))
Case "División"
If Val(ARREGLO2(j, h)) <> 0 Then
RESULTADO(j, h) = Val(ARREGLO1(j, h)) / Val(ARREGLO2(j, h))
Else
RESULTADO(j, h) = "indeterminado"
End If
End Select
msfgBaseDatos.Row = j
msfgBaseDatos.Col = h
msfgBaseDatos.Text = RESULTADO(j, h)
Next j
Next h
End Sub
Public Sub REALIZAOPERACION()
Dim sumav, sumah As Double
If opera = "Suma Vertical" Then
If entidad = "Nacional" Then
Call anual
sumav = 0
For h = añoi To añof
sumav = 0
For j = 1 To 32
sumav = sumav + Val(ARREGLO1(j, h))
msfgBaseDatos.Row = 33
msfgBaseDatos.Col = h
msfgBaseDatos.Text = sumav
Next j
Next h
End If
End If
If opera = "Suma Horizontal" Then
If fecha = "1980-2001" Then
Call estado
sumah = 0
For h = edoi To edof
sumah = 0
For j = 1 To 21
sumah = sumah + Val(ARREGLO1(h, j))
msfgBaseDatos.Row = h
msfgBaseDatos.Col = 41
msfgBaseDatos.Text = sumah
Next j
Next h
End If
End If
End Sub
Cualquier duda escríbeme aquí o ami e-mail [email protected] si gustas te envío el proyecto con las formas. ¿Me podrías mandar un ejemplo? Me es más fácil y claro. En espera de tu respuesta Berenice

3 respuestas

Respuesta
1
Cris20
Solo escrive NombreDelControl.Sort = 1
Para orden descendente y 2 para orden ascendente pero checa la propiedad "Sort" en el MSDN selecciona el control y presiona F1 en propiedades busca "Sort" para que veas todas las otras opciones que tienes con esta propiedad.
Si no lo tienes vuelve a preguntar y yo te doy todas las otras opciones y sus explicaciones.
Nota: ami me gusta más un control de VideoSoft que se llama vbFlex 6.0 que es una versión muestra y es gratis.
Este control esta a punto de caducar procura usar uno más nuevo como el "DataGrid" que es el que entro en lugar del que estas usando o usa el "mshFlexGrid"
(Todas estas no son berciones completas)
Otra vez yo
Usa
Option Explicit en todos tusproyectos en la Seccion general
With msfgBaseDatos
.Refresh
end with
para no escrivir "msfgBaseDatos.Refresh"
Tambien usa:
TextMatrix(Row, Col) para recuperar o asignar balores
Si no es procedimiento no es necesario el Call (Click, Load, etc)
Si = ARREGLO1(j, h) se refiere a un grid no lo agas asi almacena los datos en bariables esta mal que llames tantisimo al control con una ves es mas que suficiente
dim Var1 as long
Valr1 = ARREGLO1.TextMatrix(j, h)
Recupera los datos en variables as tus operaciones con las variables y así llano usaras el Val() y sera más legible tu proyecto
Utiliza Tabuladores para tus estructuras
if bla then
bla
End if
Respuesta
No se puede ordenar directamente sobre el control, pero si, se me ocurre, que podrías ordenar el array antes de todo el proceso...
Vé si te animas a armar una rutina para ordenar el array, sino escribime nuevamente que la armo y te la envío..
Suerte
Respuesta
Bueno Bere es un gusto conocerte, y entrando en completo análisis de tu problema te puedo dar varias soluciones, pero para ello debemos especificar más claramente ciertas cosas, en lo que me escribiste anteriormente me dices que los datos de aguas calientes 223333, baja california 4232320 etc, los jalas de excel a una base de datos, luego de la base de datos a tu msflexgrid, ¿no es así?, pues bueno si es así, es sencillo ordenarlos de mayor a menor, siempre y cuando conectes tus bases de datos por medio de DAO por ejemplo
dim db as dao.database
dim tb as dao.recordset
set db = opendatabase("basedatos.mdb")
set tb = db.openrecordset("SELECT * FROM datos ORDER BY cantidadnumerica") 'ESTO SI ES ASCENDENTE
set tb = db.openrecordset("SELECT * FROM datos ORDER BY cantidadnumerica DESC") 'ESTO SI ES DESCENDENTE
luego solo llenas tu msflexgrid, como le decimos aqui a pie...asi
while not tb.eof
datos = tb!lugar & chr(9) & tb!cantidadnumerica
msflexgrid.additem datos
tb.movenext
wend
DE ESTA MANERA llenara tu msflexgrid con los datos que ha obtenido de la base de datos los cuales están Asendentemente o descendentemente dependiendo de lo que tu quieras que te muestre, lo cual no es nada complicado... si no es esto lo que haces sin o lo haces de otra manera pero lo lograste entender así y quieres más ayuda no dudes en que te ayudare Bere... ahhh, de donde eres... y cuantos años tienes.
Oye jale los datos desde excel con el objeto data lo enrute con el databasename, y el record source. No tengo idea que es el objeto Dao. La idea es que las bases de datos las jalo directamente de excel. Así lo que deseo es ordenar esas bases de datos y las bases de datos generadas por el programa también. Para pasar después al siguiente punto de ilumniar el mapa
Es un tipo de conexión a bases de datos que te permite manejar más fexiblemente tus datos, pero veo que tu jalas los datos desde excel y eso esta más complicado porque tienes que instalar otras cosas para que te jalen, pero tengo una idea que te ayudara bastante, lo que tienes que hacer es que supongo los datos los ingresan en una hoja de excel y luego tu sacas reportes con visual basic verdad, porque si es así, lo que puedes hacer es que dentro de tu hoja de excel, agregues una pestaña más igual al formato original donde ingresan los datos, luego solo haces una macro para que te mande los datos ingresados en la hoja 1 a la hoja 2 y luego que te los ordene en base a las cantidades numéricas y luego en vb solo jalas la información ya ordenada pero la jalas de la hoja 2 osea de la copia y ya todos tus datos ya van a venir ordenados...
¿Me podría mandar un ejemplo?
Con un archivo de excel que desde visual basic jale la base de datos. Luego desde visual basic le ordene ordenarlos de mayor a menor y de menor a mayor. Y luego que los lleves a visual basic. ´Recuerda que el chsite es utilizar el msflexgrid.
En espera de tu respuesta
Bere
De antemano gracias eres muy amable
Creo que no me entendiste amiga, lo que sucede es que yo te indique que hicieras unicamente otra hoja donde tendrá los datos ordenados, que por medio de una macro de excel los ordenara, ¿puedes hacer macros en exel verdad? ¿Pero no me respondiste sobre si los datos los ingresan en exel ahí es donde los ingresan?, necesito saber esto para poder ayudarte...
Gracias por decir que soy amable tu también lo eres, no me dijiste cuantos años tienes ni donde vives puedes respondermelo o no...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas