|  | | 
	
		 
			
		
		Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
	 
			 
				Mensajes - Brroz
			
			Páginas: 1  ... 37 38 [39] 40 41  ... 43 
		 
			
				
				
					951 
						
						« en: Martes  2 de Septiembre de 2003, 08:39 »
					 
					Fíjate en las líneas siguientes:
 Dim objApp  As Object ' Aplicación
 Set objApp = GetObject(, "Excel.Application")
 Dim objWb As Object ' WorkBook
 Set objWb = objApp.WorkBooks(1)
 
 'Aquí viene la parte que más te interesa
 
 Dim objSh As Object ' WorkSheet
 
 ' Para añadir una hoja y ponerle un nombre:
 Set objSh = objWb.Worksheets.Add()
 objSh.Name = "Mi nueva hoja"
 
 'Para obtener la referencia a la última hoja, saber cómo se llama y cambiarle el nombre
 Set objSh = objWb.Sheets(objWb.Worksheets.Count)
 MsgBox objSh.Name
 objSh.Name = "Nuevo nombre"
 
 'Para obtener la referencia a la primera hoja
 Set objSh = objWb.Sheets(1)
 
 'Para obtener la referencia a una hoja por su nombre
 Set objSh = objWb.Sheets("Hoja x")
 
 A partir de aquí, ya sabes como va el resto...
 
 Suerte.
 
			
				
				
					952 
						
						« en: Martes  2 de Septiembre de 2003, 08:22 »
					 
					Para imprimir el informe desde vb fíjate en este ejemplo:
 Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
 
 Public Function Imprimir(ByVal Formato As String, ByVal Filtro As String _
 , Optional ByVal VistaPrevia As Boolean) As Boolean
 
 On Error GoTo Error_Imprimir
 
 Dim sngMouseP As Single
 sngMouseP = Screen.MousePointer
 Screen.MousePointer = 11
 DoEvents
 
 Dim dbW As Object
 Set dbW = GetObject("BaseDeDatos.mdb")
 If VistaPrevia Then ShowWindow dbW.hWndAccessApp, 3
 On Error Resume Next
 dbW.UserControl = False
 On Error GoTo Error_Imprimir
 Dim int1 As Integer
 If VistaPrevia Then int1 = 2 '2 = acViewPreview , 0 = acViewNormal
 If dbW.Reports.Count = 0 Then
 dbW.DoCmd.OpenReport Formato, int1, , Filtro
 Else
 Dim lng1 As Long
 For lng1 = 0 To dbW.Reports.Count - 1
 If dbW.Reports(lng1).Name = Formato Then
 dbW.Reports(Formato).Filter = Filtro
 GoTo Exit_Fn
 End If
 Next lng1
 dbW.DoCmd.OpenReport Formato, int1, , Filtro
 End If
 
 Exit_Fn:
 Imprimir = True
 
 Salir_Imprimir:
 On Error Resume Next
 If Not VistaPrevia Then
 dbW.Quit
 Else
 dbW.DoCmd.Maximize
 dbW.UserControl = True
 End If
 Set dbW = Nothing
 Screen.MousePointer = sngMouseP
 Exit Function
 
 Error_Imprimir:
 MsgBox "Fallo al imprimir informe '" & Formato & "'" & String(2, vbCrLf) _
 & "(" & Err.Number & ") " & Err.Description, vbCritical, "Imprimir"
 VistaPrevia = False
 Resume Salir_Imprimir
 
 End Function
 
 Con respecto a lo de tener varias tablas como origen de registro para tu informe, utiliza como origen de registro para el informe (propiedad RowSource) una consulta de access o instrucción SQL.
 
 Espero que esto te vaya bien.
 Sort.
 
			
				
				
					953 
						
						« en: Martes  2 de Septiembre de 2003, 08:14 »
					 
					Puedes abrir los archivos desde vb y compararlos línea a línea con algo así:
 Private Function SonIguales(Byval Archivo1 As String, Byval Archivo2 as String) As Boolean
 
 Dim int1 as integer, int2 as integer
 Dim str1 as string, str2 as string
 
 On Error Goto Error_Comparar
 
 int1 = FreeFile
 Open "Archivo1" For Input As #int1
 int2 = FreeFile
 Open "Archivo2" For Input As #int2
 
 Do Until Eof(int1)
 LineInput #int1, str1
 LineInput #int2, str2
 If str1 <> str2 then Goto Salir_Comparar
 Loop
 
 If Eof(int2) Then Son Iguales = True
 
 Salir_Comparar:
 On Error Resume Next
 Close #int1
 Close #int2
 Exit Function
 
 Error_Comparar:
 MsgBox Err.Description
 Resume Salir_Comparar
 
 End Function
 
 Si la comparación es algo puntual, también podrías utilizar el comando D.O.S. 'FC' (file compare).
 
 Suerte.
 
			
				
				
					954 
						
						« en: Martes  2 de Septiembre de 2003, 08:02 »
					 
					Exacto. La carpeta no puede contener archivos ni otras carpetas (igual que con el 'RD' de D.O.S.).
 Suerte.
 
			
				
				
					955 
						
						« en: Lunes  1 de Septiembre de 2003, 14:18 »
					 
					En Access puedes recuperar el nombre y vía de acceso de la base de datos actual mediante la propiedad 'Name' del objeto 'CurrentDb'. Si es desde vb con DAO, mira la misma propiedad del objeto que definas como 'Database'. Si usas ADO, en la cadena de conexión tienes la base de datos, como te indica Angel-Mayor. Luego para recuperar el path :
 Dim str1 as String
 str1 = CurrentDb.Name
 Dim int1 as Integer
 int1 = InstrRev(str1,"")
 Dim strDbPath as string
 strDbPath =  Left(str1, int1)
 
 Suerte.
 
			
				
				
					956 
						
						« en: Lunes  1 de Septiembre de 2003, 14:10 »
					 
			
				
				
					957 
						
						« en: Lunes  1 de Septiembre de 2003, 13:31 »
					 
					¿Estará vacía la carpeta?Mira a ver. Suerte.
 
			
				
				
					958 
						
						« en: Lunes  1 de Septiembre de 2003, 13:27 »
					 
					Utiliza el código que te indiqué en http://foros.solocodigo.com/viewthread.php?tid=4724 . El valor para cada byte lo obtendrás como elemento de la matriz que le pases como parámetro. Por ejemplo:  después de añadir el código aquel, añade este otro para probar en algún sitio. Dim byt1() as Byte PackNro 23434 , byt1 , LittleEndianByteOrder Msgbox "Primer byte " & byt1(1)  'byt1(1) = 138 Msgbox "Segundo byte " & byt1(2)  'byt1(2) = 91 Msgbox "Tercer byte " & byt1(3)  'byt1(3) = 0 Msgbox "Cuarto byte " & byt1(4)  'byt1(4) = 0 Si te das cuenta 23434 = 138 * 256^0 + 91 * 256^1 + 0 * 256^2 + 0 * 256^3  A ver si esto te va bien. Suerte y a ver que tal.
					 
			
				
				
					959 
						
						« en: Lunes  1 de Septiembre de 2003, 08:39 »
					 
					Utiliza un código de este estilo:
 Dim int1 As Integer, strRowSource As String, str1(5) as string
 
 str1(0) = "Elemento 1"
 str1(1) = "Elemento 2"
 str1(2) = "Elemento 3"
 str1(3) = "Elemento 4"
 str1(4) = "Elemento 5"
 
 For int1 = LBound(str1) To UBound(str1)
 strRowSource = strRowSource & str1(int1) & ";"
 Next int1
 With Lista1
 .RowSourceType = "Value List"
 .RowSource = strRowSource
 .Requery
 End With
 
 Espero que esto te sirva.
 Suerte.
 
			
				
				
					960 
						
						« en: Sábado 30 de Agosto de 2003, 11:10 »
					 
					Prefiero no entrar en debates que nunca conducen a ninguna parte, pero en vista del éxito que está teniendo este post, no puedo evitar escribir algo para dar mi opinión.
 Que quede claro que no me parece acertado el uso que Observador hace de este foro para hacerse propaganda. En la página inicial puedes ver una sección  'Ayúdanos a crecer'  que es a donde Observador debería acudir. Ahora bien cada cual sabrá a qué foros quiere acudir, participar y en cuál puede encontrar las mejores respuestas a sus dudas.
 
 Más penoso sí que me parece la actitud de "mis respuestas son estupendas y las tuyas una merda": la peor respuesta es la que no se produce. Hablando de foros de calidad, busque, compare y si encuentra algo mejor... Me parece que lo que abunda por ahí es mucho EGO HAMBRIENTO (a ver si alguien se da por aludido).
 
 Por último decir, desviándome del tema, que ya va siendo hora de cambiar de mentalidad en lo relativo a los POBRES LOBOS que bien que llevan pagado esa mala fama que tienen desde tiempos inmemoriables hasta extremos que rozan su extinción. Cada vez que rememoro su aullido en la sierra del Suído se me ponen los pelos de punta...
 
 Saludos para todos y que no llegue la sangre al río.
 
			
				
				
					961 
						
						« en: Sábado 30 de Agosto de 2003, 08:59 »
					 
					Desconozco la forma de obtener el nº de serie de un equipo y si esto es realmente posible (imagínate el típico pc con una placa de su padre, un micro de su madre y discos del primo segundo...).De todas formas imagino que tal vez necesitas el s/n para OBTENER UN NÚMERO ÚNICO para el equipo. Si esto es así, ahí va un ejemplo sacado del ¿desaparecido? AMBSoftware, copiado tal cual:
 
 ***************************************
 
 Generar un número único para un ordenador
 
 Es la función que se usa para crear las claves esas que están en el registro de windows (CLSID) y que el VB6 usa internamente para generar una clave única cuando creamos un nuevo componente ActiveX.
 
 La función está encapsulada en una clase y se usa como cualquier objeto, es decir, declaras el tipo y llamas al método que te interesa, que en este caso es una función que devuelve el valor formateado al estilo de como lo vemos en el registro.
 El valor devuelto es una cadena en la que, como mínimo, las últimas 8 cifras son siempre las mismas para cada equipo, por tanto, usando esas 8 cifras tienes identificado el equipo.
 
 Parece que si el equipo tiene una tarjeta de red influye en esa cifra, pero si no la tiene, también hace que sea único por lo que puede que ese número cambie si se cambia la tarjeta de red o se instala en un equipo que no tenga.
 
 Option Explicit
 
 Private Type GUID
 Data1 As Long
 Data2 As Integer
 Data3 As Integer
 Data4(0 To 7) As Byte
 End Type
 
 Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long
 Const S_OK = 0 ' return value from CoCreateGuid
 
 Public Function GetGUID() As String
 Dim lResult As Long
 Dim lguid As GUID
 Dim MyguidString As String
 Dim MyGuidString1 As String
 Dim MyGuidString2 As String
 Dim MyGuidString3 As String
 Dim DataLen As Integer
 Dim StringLen As Integer
 Dim i As Integer
 On Error GoTo error_olemsg
 lResult = CoCreateGuid(lguid)
 If lResult = S_OK Then
 MyGuidString1 = Hex$(lguid.Data1)
 StringLen = Len(MyGuidString1)
 DataLen = Len(lguid.Data1)
 MyGuidString1 = LeadingZeros(2 * DataLen, StringLen) & MyGuidString1 'First 4 bytes (8 hex digits)
 MyGuidString2 = Hex$(lguid.Data2)
 StringLen = Len(MyGuidString2)
 DataLen = Len(lguid.Data2)
 MyGuidString2 = LeadingZeros(2 * DataLen, StringLen) & Trim$(MyGuidString2) 'Next 2 bytes (4 hex digits)
 MyGuidString3 = Hex$(lguid.Data3)
 StringLen = Len(MyGuidString3)
 DataLen = Len(lguid.Data3)
 MyGuidString3 = LeadingZeros(2 * DataLen, StringLen) & Trim$(MyGuidString3) 'Next 2 bytes (4 hex digits)
 MyguidString = MyGuidString1 & "-" & MyGuidString2 & "-" & MyGuidString3 & "-"
 For i = 0 To 7
 MyguidString = MyguidString & Format$(Hex$(lguid.Data4(i)), "00")
 Next
 'MyGuidString contains last 8 bytes of Guid (16 hex digits)
 GetGUID = MyguidString
 Else
 GetGUID = "00000000-0000-0000-0000000000000000" ' return zeros if function unsuccessful
 End If
 Exit Function
 error_olemsg:
 MsgBox "Error " & Str(Err) & ": " & Error$(Err)
 GetGUID = "00000000-0000-0000-0000000000000000"
 Exit Function
 End Function
 
 Private Function LeadingZeros(ExpectedLen As Integer, ActualLen As Integer) As String
 LeadingZeros = String$(ExpectedLen - ActualLen, "0")
 End Function
 
 Para usar la clase:
 
 Private Sub cmdGenGUID_Click()
 'Creamos una instancia de la clase
 Dim tGuid As New cGUID
 'Asignamos el número generado, en este ejemplo lo asignamos a un Label
 Label2 = tGuid.GetGUID
 'Destruimos la referencia al objeto
 Set tGuid = Nothing
 End Sub
 
 ***************************************
 
 Espero que te sea útil.
 Suerte.
 
			
				
				
					962 
						
						« en: Viernes 29 de Agosto de 2003, 11:31 »
					 
					Si el informe te lo curras tú utilizando el objeto Printer, no hay problema: utilizando su método PaintPicture podrás imprimir imágenes (ojo con el formato de la imagen, no lo he probado, pero me imagino que por ejemplo un tiff casi seguro que no lo imprime).
 Suerte.
 
			
				
				
					963 
						
						« en: Viernes 29 de Agosto de 2003, 10:43 »
					 
					Hombre, no sé si estarás usando 'CSng' como indicas... si es así, hazlo de este modo: varSingle = CSng(varVariant), donde varSingle es la variable single y varVariant es la variant (evidente). Si ya lo haces así (supongo), entonces es que el valor variant no puede ser convertido a single.
 Ya contarás. Suerte.
 
			
				
				
					964 
						
						« en: Viernes 29 de Agosto de 2003, 10:03 »
					 
					La gestión de la multitarea es cosa de windows. Un proceso que quieras abrir desde vb puede funcionar tanto de forma asíncrona como síncrona.Suele jugar un papel muy importante la instrucción 'DoEvents' que permite que se ejecuten los eventos que estan en cola y permite respirar al resto de tus componentes. Esto, así a grandes rasgos, es lo que te puedo decir sobre multitarea en vb. Ahora bien, en mi ignorancia me da la sensación de que en tu caso el problema está en la captura de imagen de video, que debe ser una labor dedicada (dedicada, no delicada). De hecho, según creo, para poder capturar video con el pc se necesita un puerto firewall para la cámara, con otro puerto corriente y moliente no te funcionaría, lo que da que pensar...
 
 En fin, a ver si algún experto arroja más luz sobre el tema.
 
 Suerte.
 
			
				
				
					965 
						
						« en: Viernes 29 de Agosto de 2003, 09:52 »
					 
					El siguiente código te permite recuperar como elementos de una matriz las distintas aplicaciones activas.
 Private Type PROCESSENTRY32
 dwSize As Long
 cntUsage As Long
 th32ProcessID As Long
 th32DefaultHeapID As Long
 th32ModuleID As Long
 cntThreads As Long
 th32ParentProcessID As Long
 pcPriClassBase As Long
 dwFlags As Long
 szExeFile As String * 260
 End Type
 
 Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
 Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
 Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
 Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
 
 Private Type TareaActiva
 Id As Long
 ExeFile As String
 End Type
 
 Private Tareas() As TareaActiva
 
 Private Sub ObtenerProcesos()
 
 Dim lngSnapShot As Long
 Dim Proceso As PROCESSENTRY32
 Dim lngRc As Long, lngCta As Long
 lngSnapShot = CreateToolhelpSnapshot(2&, 0&)
 If lngSnapShot <> 0 Then
 Proceso.dwSize = Len(Proceso)
 lngRc = ProcessFirst(lngSnapShot, Proceso)
 Do While lngRc
 lngCta = lngCta + 1
 ReDim Preserve Tareas(1 To lngCta)
 Tareas(lngCta).Id = Proceso.th32ProcessID
 Tareas(lngCta).ExeFile = Left(Proceso.szExeFile, InStr(Proceso.szExeFile, Chr(0)) - 1)
 lngRc = ProcessNext(lngSnapShot, Proceso)
 Loop
 CloseHandle lngSnapShot
 End If
 
 End Sub
 
 Suerte.
 
			
				
				
					966 
						
						« en: Viernes 29 de Agosto de 2003, 09:47 »
					 
					Si el programa lo iniciaste tú, fijate en este ejemplo que ejecuta un programa y si en 1 minuto no acaba por si solo, lo finaliza:
 Private Declare Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
 Private Declare Function GetExitCodeProcess Lib "Kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
 Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
 Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
 
 Private Sub Someter()
 
 Const STILL_ACTIVE = &H103
 Const PROCESS_QUERY_INFORMATION = &H400
 Dim lng1 As Long, lngRc As Long
 Dim intCta as Integer, lngExitCode as long
 lng1 = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("MiPrograma.Exe", vbNormalFocus))
 Do
 GetExitCodeProcess lng1, lngRc
 intCta = intCta + 1
 if intCta > 60 Then
 lngRc = TerminateProcess(lng1 , lngExitCode)
 Exit Do
 Else
 Sleep 1000
 DoEvents
 End If
 Loop While lngRc = STILL_ACTIVE
 
 End Sub
 
 Suerte.
 
			
				
				
					967 
						
						« en: Viernes 29 de Agosto de 2003, 09:03 »
					 
					Yo muchas veces he utilizado los informes de access. Esto le permite a un usuario o a mi crear nuevos informes o modificar los existentes sin ninguna compilación. Otra ventaja es que puedo utilizar la presentación preliminar del informe. Todo esto mediante automatización.Para luego incorporar el nuevo informe para ser llamado por el programa vb, utilizo el mantenimiento de una tabla que contiene los datos necesarios para ejecutar el informe desde la aplicación (su nombre, origen de registro, descripción, ...).
 
 Es una idea más.
 Sort.
 
			
				
				
					968 
						
						« en: Viernes 29 de Agosto de 2003, 08:56 »
					 
			
				
				
					969 
						
						« en: Viernes 29 de Agosto de 2003, 08:52 »
					 
					Hola Gerard, encantado...
					 
			
				
				
					970 
						
						« en: Viernes 29 de Agosto de 2003, 08:49 »
					 
					Aparte de la correcta solución que te ha proporcionado J.M.Movilla, pienso en mi atrevimiento, que deberías replantearte el método y lógica de tu código: que abras un formulario no debe provocar que se mueva el puntero del recordset (sin saber más me da la sensación que se está desencadenando un evento en un momento que tú no deseas). Además veo que en los últimos mensajes te preocupas por el valor que muestra un textbox, cosa que debería ser indiferente si al textbox le asignas su valor en el momento adecuado. A lo mejor es mucho decir por mi parte, pero te aconsejaría que repasaras el código que tienes en los distintos eventos.De todas formas, repito que la solución que te brindan debería solventar tu incidencia perfectamente.
 
 Sort.
 
			
				
				
					971 
						
						« en: Jueves 28 de Agosto de 2003, 11:26 »
					 
					Podrías probar 'empaquetando' los datos con algo así:
 Public Enum ByteOrderEnum
 LittleEndianByteOrder = 0  'Primero el byte menos significativo
 BigEndianByteOrder = 1 'Primero el byte más significativo
 End Enum
 
 Public Sub PackNro(ByVal Valor As Long, bytRes() As Byte, Byval ByteOrder as ByteOrderEnum)
 
 Dim byt1(1 To 4) As Byte
 Dim intMaxExp As Integer
 
 ReDim bytRes(1 To 4)
 
 Valor = Abs(Valor)
 byt1(1) = 0
 byt1(2) = 0
 byt1(3) = 0
 byt1(4) = 0
 
 Do While intMaxExp <= 4
 If Int(Valor / 256 ^ intMaxExp) > 255 Then
 intMaxExp = intMaxExp + 1
 ElseIf intMaxExp = 0 Then
 byt1(1) = Valor
 GoTo Salir_PackLong
 Else
 Exit Do
 End If
 Loop
 
 Do Until Valor = 0
 byt1(intMaxExp + 1) = Int(Valor / 256 ^ intMaxExp)
 Valor = Valor - byt1(intMaxExp + 1) * 256 ^ intMaxExp
 intMaxExp = intMaxExp - 1
 Loop
 
 Salir_PackLong:
 If byteOrder = LittleEndianByteOrder Then
 bytRes = byt1
 Else
 bytRes(1) = byt1(4)
 bytRes(2) = byt1(3)
 bytRes(3) = byt1(2)
 bytRes(4) = byt1(1)
 End If
 
 End Sub
 
 Ya contarás a ver que tal.
 Suerte.
 
			
				
				
					972 
						
						« en: Jueves 28 de Agosto de 2003, 11:19 »
					 
					Ahora que lo pienso se podría hacer al revés de lo que sugería:
 Defino una variable, obtengo con VarPtr la dirección del puntero de la variable, paso como parámetro ese puntero y el tamaño deseado para el parámetro y el programita en C sólo tiene que modificar esas posiciones de memoria (eso si que n.p.i. de cómo hacerlo).
 
 Espero que nos cuentes algo.
 Suerte.
 
			
				
				
					973 
						
						« en: Jueves 28 de Agosto de 2003, 11:05 »
					 
					Si lo que deseas es hacer un FTP, yo usaría el control Inet o ejecutaría un archivo de proceso por lotes, la pega para tu necesidad sería que el evento que te comentaba no estaría disponible.
 Ops! Veo que ya te han dado otras soluciones al problema, mejor así.
 
 Disculpas y suerte.
 
			
				
				
					974 
						
						« en: Jueves 28 de Agosto de 2003, 11:02 »
					 
					Usa este código a ver que tal.
 Private Function Copiar(Byval Origen as string, Byval Destino as string) as Boolean
 Dim intO as integer, intD as integer, byt1() as Byte
 On Error Goto Error_Copiar
 intO = FreeFile
 Open Origen For Binary as #intO
 ' En el caso de que el fichero no fuera muy grande.
 Redim byt1(1 to Lof(intO))
 'Si el fichero es demasiado grande, deberás implementar un buffer dimensionando 'byt1' al tamaño que tu veas y haciendo un bucle hasta que llegues a la longitud del fichero.
 intD = FreeFile
 Open Destino For Binary as #intD
 Get #intO,,byt1
 Put #intD,,byt1
 Copiar = True
 Salir_Copiar:
 On Error resume next
 Close #intO
 Close #intD
 Exit Function
 Error_Copiar:
 MsgBox Err.Description
 Resume Salir_Copiar
 End Function
 
 Suerte.
 
			
				
				
					975 
						
						« en: Miércoles 27 de Agosto de 2003, 09:21 »
					 
					El ejemplo que te da Giomar suma el número de facturas, pero supongo que tú necesitas sumar los importes de las lineas, con lo que abría que utilizar un SQL tal que así:
 SELECT Sum(CampoImporte) FROM LineasFacturas WHERE NumFactura = '001' GROUP BY NumFactura
 
 Si como dices en un mensaje más abajo prefieres la opción del 'acumulador', entonces añade una pregunta filtrando los valores que te interesen antes de sumar:
 
 If Datagrid1.Columns(IndiceClave).Value = "001" Then
 acumulador=acumulador+Datagrid1.Columns(IndiceDeColumna_a_Sumar).Value
 
 Esto te irá algo más lento pero...
 
 Sort.
 
			Páginas: 1  ... 37 38 [39] 40 41  ... 43 
		 | 
 |  |