Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ayuda por favor

Estas en el tema de Ayuda por favor en el foro de Visual Basic clásico en Foros del Web. Hola erbunson! Bueno he puteado tu codigo hasta ver donde me daba error y ya lo he solucionado lo del error 5 y otros posteriores, ...

  #31 (permalink)  
Antiguo 30/04/2010, 03:41
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbunson!

Bueno he puteado tu codigo hasta ver donde me daba error y ya lo he solucionado lo del error 5 y otros posteriores, eran temas de algun comando o variable mal escrita, le faltaba o sobrava algun caracter y las variables de la UDT que tenias en Totalhoras como integer y no como date o en dia semana String * 8 en vez de * 10, estos errores fueron mios al principio y cuando los he visto lo he cambiado y ha funcionado perfectamente.
Lo que he notado es que con este codigo haces unas cuantas cosas de las consultas que te habia posteado, combo2, combo1, etc. con lo que me va perfecto para entender esas partes y saber como hacerlo.Ahora el resto lo estudio y lo guardo como Herramienta de consulta y aprendizaje.
Ahora solo me queda saber porque no se me guarda nada en la Matriz.

Un saludo
  #32 (permalink)  
Antiguo 30/04/2010, 04:58
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

El tema de la matriz, creo que el error está en que NUNCA agregas un nuevo elemento sino que siempre actúas sobre el mismo:

Antes del Redim Preserve pones un MsgBox que te indique el valor que pretendes ampliar

MsgBox Ubound(CSemanas, 1) + 1 ' Creo que siempre te dará lo mismo

Ubound(CSemanas, 1) es precisamente lo que no puedes cambiar

Si has Definido CSemanas(5, 1) el Ubound(CSemanas, 1) + 1 siempre será 6 creo

De ahí que siempre estás utilizando el mismo valor. Por otra parte si quieres un consejo, acostumbra a no utilizar un código tan enrevesado por la única razon de que el día de mañana, y te lo digo por experiencia, cuando vayas a efectuar algún cambio te va a costar volver a 'meterte' en el programa.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #33 (permalink)  
Antiguo 30/04/2010, 06:00
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbuson!

Creo que estas mirando un codigo antiguo pues en el codigo actualmente el unico MsgBox que hay esta al fin del codigo .:


Código vb:
Ver original
  1. Public Sub ContadorSemanas()
  2.  
  3. Dim Control As Integer
  4. Dim NRegistro As Integer
  5. Dim i As Integer
  6.  
  7. D = LOF(Numero) / 94
  8. RegUltimo = LOF(Numero) / 94
  9. Control = 0
  10.  
  11. ReDim CSemanas(1, 1)
  12.  
  13. For i = 1 To D
  14.  
  15.     Get #Numero, RegUltimo, Horas
  16.     NRegistro = RegUltimo
  17.     RegUltimo = RegUltimo - 1
  18.    
  19.      If Horas.npedido = npedido_C Then
  20.             If Control <> Horas.semana Then
  21.                 ReDim Preserve CSemanas(1, UBound(CSemanas, 1) + 1)
  22.                 CSemanas(0, UBound(CSemanas, 1) + 1) = NRegistro
  23.                 CSemanas(1, UBound(CSemanas, 1) + 1) = Horas.semana
  24.                 Control = Horas.semana
  25.                 cbo_semanas.AddItem Horas.semana
  26.             End If
  27.      End If
  28.  
  29. Next i
  30.  
  31. NrSemanas = UBound(CSemanas, 2) + 1
  32.  
  33. MsgBox CSemanas(0, 0) & " ; " & CSemanas(0, 1) & vbCrLf & _
  34.        CSemanas(1, 0) & " ; " & CSemanas(1, 1) & vbCrLf
  35.  
  36. End Sub

es este el que no me añade nada, bueno el otro es que ni corria, el que creo haces referencias es el que tenia el With y la matriz declarada internamente y no publica en un modulo que es como esta ahora, igual al que te he enviado.

Un saludo

Última edición por XYON126; 30/04/2010 a las 06:06
  #34 (permalink)  
Antiguo 30/04/2010, 06:30
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola, no has entendido mi idea, lo que realmente te indico es que se lo pongas para que veas lo que pienso es el error.

He recibido tu correo, esta noche le hago unos intentos.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #35 (permalink)  
Antiguo 30/04/2010, 09:14
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbuson!

Ahora he visto lo que comentas, es cierto siempre me da el mismo valor, lo he cambiado por "ReDim Preserve CSemanas(1, UBound(CSemanas, 2) + 1)" y aqui como minimo me aumenta la matriz pero ahora pasa de un inicio CSemanas(1, 1) a otra temporal de CSemanas(1, 4) y el problema se mantiene en lo de no grabar nada y si cambio estas lineas .:

ReDim Preserve CSemanas(1, UBound(CSemanas, 2) + 1)
CSemanas(0, UBound(CSemanas, 1) + 1) = NRegistro
CSemanas(1, UBound(CSemanas, 1) + 1) = Horas.semana


por estas .:

MsgBox UBound(CSemanas, 2) + 1
MsgBox CSemanas(0, M) & " ; " & CSemanas(1, M)
MsgBox NRegistro & " ; " & Horas.semana
ReDim Preserve CSemanas(1, UBound(CSemanas, 2) + 1)
CSemanas(0, M) = NRegistro
CSemanas(1, M) = Horas.semana
Control = Horas.semana
M = M + 1

entonces el error desaparece, las celdas aumentan ya me guarda pero me genera un ultimo registro en blanco voy haber si lo soluciono.

Por cierto en el codigo que te he pasado veras que hay varios botones que aunque tienen codigo no hacen nada, ya lo tengo en cuenta pues estoy en ello incluso funciones como la FunsemanaActual, etc. pero si lo ejecutas cuando ya se visualice el formulario creo que entonces me entederas y que es lo que quiero hacer.Encontraras mucha paja inutil que he de limpiar.

Un saludo

Última edición por XYON126; 30/04/2010 a las 09:20
  #36 (permalink)  
Antiguo 30/04/2010, 09:36
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola 'Xyon'

Si compruebas tu correo, acabo de mandarte unos cambios importantes. Intentaré por si a alguien le sirve copiarlos en el foro, pero me he dado cuenta de que si se inserta en este como VBScript, cuando se copian, se copian tamién algunos caracteres en blanco que no se de donde aparecen y son los causantes de muchos errores en el código al ir a ejecutarlo.

Por ejemplo en el caso de la función GridPonerDato, desde luego yo no puse los asteriscos y aunque efectivamente aparecen en mi mensaje, no se como han ido a parar ahí.

Es una lástima que no podamos subir archivos al foro.

Nos hablamos.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #37 (permalink)  
Antiguo 30/04/2010, 09:56
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

hola erbuson!

Ya los he abierto y quizas el tema este que no hayan muchos componentes abiertos sin uso, pùes a mi me ha abierto el Publisher y se ha estado 2 minutos cargado cosas y en el VB la tabla de componentes estaba llena habran umos 30 acticados como minimo.


Un saludote
  #38 (permalink)  
Antiguo 30/04/2010, 10:17
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola:

Pues probablemente porque al abrir el proyecto por norma le indico que me cargue la versión Profesional y realmente sólo utilizo el Grid.

Si tienes problemas con el, lo cargo nuevamente y le dejo sólo los complementos utilizados.

Lo del Publisher imagino que debe ser porque alguno de los componentes de la versión profesional forma parte de él y por esto los ha cargado.

Dime cosas y hablamos mas tarde.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #39 (permalink)  
Antiguo 01/05/2010, 02:11
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Cita:
Iniciado por erbuson Ver Mensaje
Hola:

Pues probablemente porque al abrir el proyecto por norma le indico que me cargue la versión Profesional y realmente sólo utilizo el Grid.

Si tienes problemas con el, lo cargo nuevamente y le dejo sólo los complementos utilizados.

Lo del Publisher imagino que debe ser porque alguno de los componentes de la versión profesional forma parte de él y por esto los ha cargado.

Dime cosas y hablamos mas tarde.
Hola maestro!

No tranquilo yo tambien tengo la versión profesional full y no hay problema, ya lo he abierto y lo he hecho funcionar sin problemas, era solo un punto de información. Por lo de los complementos si veo que hacen un poco la puñeta se los quito pues se de sobras cuales deben estar activados para esto, en tres semanitas ya llevo unas cuantas batallas, unas ganadas y otras perdidas pero todas controladas. Ya me comentaras que opinas de lo mio algo que se que para ti son 10 min. pero para mi un currete, las criticas por duras que sean siempre son buenas.

Un saludote
  #40 (permalink)  
Antiguo 01/05/2010, 02:23
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbuson!

En el codigo que me has enviado comentas que escepto la funcion SumarGrid el resto de funciones incluyendo la Matriz UDT deberian ir en un modulo; el por que de los modulos lo tengo claro hasta en un 60% podrias hacer una breve explicacion (pero para cazurros como yo) el porque, cuando y que se debe poner en un modulo u otro o ir en el formulario base. Es para tenerlo mas claro aún.

en el formulario base es o no imprescindible y necesario el Option Explicit u otro ¿Cual?

Pues yo suelo ponerlo porque en el unico libro que compre y por error siempre te hace referencia al Option Explicit y no te dice porque y despues veo por ahi codigos que funcionan y no lo tienen.

Un saludo
  #41 (permalink)  
Antiguo 01/05/2010, 07:43
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola amigo Xyon:

La fiesta del trabajo y tu currando y haciéndome currar a mi (es broma) como habrás adivinado si tengo un vicio, es la programaciópn, no consigo detenerme y que mayor satisfacción para mi que poder ayudar a entender lo que a mi tanto me costó, porque es verdad aunque en los libros se explica todo o casi todo, la mayoría de las veces una explicación procedente de la experiencia es mucho mas productiva.

Vamos por lo fácil, la pregunta de Option Explicit, esta declaración lo que consigue es evitar que se produzcan errores de tipografía difíciles de detectar. Efectivamente un programa bien desarrollado no tiene la necesidad de ella, pero personalmente siempre la utilizo. Te explico su significado con un ejemplo

Function MultiplicaPorDos(Factor As Single) As Single
' Esta función tan simple devuelve como resultado el Factor multiplicado por 2
MultiplicaPonDos = Factor * 2
End Function

Como puedes ver, he cometido un error de escritura ya que en vez de MultiplicaPorDos de salida utilizo MultiplicaPonDos por lo que SIEMPRE devolverá 0

Si tengo el Option Explicit como primera sentencia del programa, éste me producirá un error porque MultiplicaPonDos no ha sido definida previamente así que me daré cuenta enseguida del error. Sun inconveniente, pues que siempre tienes que definir las variables con DIM cuando vayas a utilizarlas, a no ser que sean variables comunes que están definidas al principio o en un módulo. Un inconveniente que personalmente prefiero tener ya que así soy yo quien determina realmente el tipo de las variables a utilizar.

Respecto al tema de los módulos para entenderlo haremos tambien un ejemplo:

'*******************************************
Libreria.bas (Este es un módulo en el que tenemos funciones reutilizables por cualquier programa que efectuemos)
'*******************************************

Public Sub GridCabecera(Grid As MSFlexGrid, Columna As Single, AnchoTwips As Single, Titulo As String, Ajuste As String)
' Crea Cabeceras de un MsFlexGrid creando la Columna is no Existe
End Sub

Public Sub GridPonerDato(Grid As MSFlexGrid, Fila As Single, Columna As Single, Dato As Variant)
' Pone Datos en una Fila/Columna de un MsFlexGrid controlando exista la Fila y La Columna
End Sub

Public Sub ComboAdd(Combo As ComboBox, Item As String)
' Añade elementos a un combo evitando duplicados
End Sub

Public Function HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String
' Obtiene la diferencia de Horas entre dos Date
End Function
*
Public Function HmsSum(ByVal HmsUno As String, ByVal HmsDos As String) As String
' Suma dos valores de hh:mm:ss sin tener en cuenta el limite de 24 horas
End Function

'*******************************************
FicherosHoras.bas (Este es un módulo donde tenemos rutinas y funciones que utilizamos en TODOS los Formularios de Horas)
'*******************************************

Public Type Horas_T
inicio1 As Date
fin1 As Date
inicio2 As Date
fin2 As Date
inicio3 As Date
fin3 As Date
tiempo As Date
dia As String * 10 ' Lunes, Martes, ...
fecha As Integer
semana As Integer ' 1, 2, 3 ...
mes As String * 10 ' Enero, Febrero, ...
año As Integer
npedido As Long
Totalhoras As Date
End Type
Public RegistroHoras As Horas_T

Sub FicheroHoras(Opcion As Integer, Registro as Single)
' Funciones de Apertura, Lectura, Grabacion, Borrado, etc
End Sub

¿ Porque los módulos de esta manera ?

Cuando inicio una nueva aplicación, incluyo evidentemente el módulo libreria al cual si es necesario efectúo las modificaciones y mejoras oportunas, siempre teniendo en cuenta que este módulo esta incluido en el resto de los programas y no debo afectuar al normal funcionamiento de los mismos. ¿ Como consigo hacerlo ? Si para efectuar una mejora a una de las funciones o rutinas y debo pasarle un nuevo parámetro, le indico que el mismo es opcional, y controlo en la rutina las funciones del mismo, de este modo una recompilación de los demas programas, aunque haya sufrido modificaciones la rutina de Libreria no afecta a los mismos, a no ser que se trate de una mejora que implica una mejora para todos, de este modo una simple recompilación me modifica todos los programas.

Si la aplicación que empiezo debe utilizar el fichero de Horas, incluyo en el mismo FicherosHoras.bas, con lo que sin hacer nada tengo acceso a todos los datos de la propia aplicación. Por esta razón, amigo Xyon tal como te explicaba en uno de los post, incluyo siempre en el Type un numero prudente de Bytes Libres, ya que como puedes adivinar un cambio en la estructura del mismo, si no modifico la longitud de registro, me modifica tras la recompilación todos los programas a los que afecta.

Bueno, supongo que con este capítulo ya tienes en que pensar, y ya sabes donde me tienes.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #42 (permalink)  
Antiguo 03/05/2010, 02:51
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbuson!

Gracias por la explicación, he visto esto y como bien comentas la experiencia es un grado.:

Public Sub ComboAdd(Combo As ComboBox, Item As String)
' Añade elementos a un combo evitando duplicados
End Sub

Cuando tu declaras esto "Combo As ComboBox" ¿Que consigues, que hace? pues si veo que es parte de una función pero en una funcion aparte de declararles las variables ¿que es lo que le puedes declarar?¿Con que fin dentro y no fuera?¿Porque?
Como ves esta es una de las consultas tipicas que a menos que las contesteis vosotros que sabeis en libros y manuales ni las tocan, ni las comentan y naturalmente ni sabes que existen.

Un saludo
  #43 (permalink)  
Antiguo 03/05/2010, 03:22
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola:

Pegaré aqui va función que es muy simple pero aqui la dejo para otros, a ti te la había adjuntado en el archivo que te mandé.

Código vb:
Ver original
  1. Public Sub ComboAdd(Combo As ComboBox, Item As String)
  2.   ' Añade Item al combo indicado si no está en el
  3.  Dim Indice As Single
  4.   For Indice = 0 To Combo.ListCount - 1
  5.     ' Si lo encuentra simplemente salimos
  6.    If Combo.List(Indice) = Item Then Exit Sub
  7.   Next
  8.   ' Si no hemos salido, debemos añadirlo
  9.  Combo.AddItem Item
  10. End Sub

Lo que hace esta función es añadir elementos a un combo controlando que no esté ya en él, en tu caso está aplicada para permitirte seleccionar un día de la semana del grid o sea, que aunque tengas 4 veces Martes en la columna x y 3 veces Jueves y 5 Lunes, en el combo sólo lo tendrás una vez.

Respecto a tu pregunta de lo que significa las variables que se definen, le estamos diciendo que cuando llamemos a ComboAdd le pasaremos como primer parámetro un objeto que es un ComboBox y como segundo una variable de Cadena a la que le pongo el nombre de Item para verlo mas claro.

Por ejemplo lo que no puedes hacer es llamar a la función de la siguiente manera:

Call ComboAdd(CajaTexto, 1215)

en primer lugar porque el primer parámetro es un TextBox y la rutina espera un ComboBox y el Segundo es un Numero y la rutina espera una cadena, por ejemplo la llamada correcta seria:

Call ComboAdd(MiCombo, "Lunes")

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #44 (permalink)  
Antiguo 03/05/2010, 03:56
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Cita:
Iniciado por erbuson Ver Mensaje
Hola:

Pegaré aqui va función que es muy simple pero aqui la dejo para otros, a ti te la había adjuntado en el archivo que te mandé.

Código vb:
Ver original
  1. Public Sub ComboAdd(Combo As ComboBox, Item As String)
  2.   ' Añade Item al combo indicado si no está en el
  3.  Dim Indice As Single
  4.   For Indice = 0 To Combo.ListCount - 1
  5.     ' Si lo encuentra simplemente salimos
  6.    If Combo.List(Indice) = Item Then Exit Sub
  7.   Next
  8.   ' Si no hemos salido, debemos añadirlo
  9.  Combo.AddItem Item
  10. End Sub

Lo que hace esta función es añadir elementos a un combo controlando que no esté ya en él, en tu caso está aplicada para permitirte seleccionar un día de la semana del grid o sea, que aunque tengas 4 veces Martes en la columna x y 3 veces Jueves y 5 Lunes, en el combo sólo lo tendrás una vez.

Respecto a tu pregunta de lo que significa las variables que se definen, le estamos diciendo que cuando llamemos a ComboAdd le pasaremos como primer parámetro un objeto que es un ComboBox y como segundo una variable de Cadena a la que le pongo el nombre de Item para verlo mas claro.

Por ejemplo lo que no puedes hacer es llamar a la función de la siguiente manera:

Call ComboAdd(CajaTexto, 1215)

en primer lugar porque el primer parámetro es un TextBox y la rutina espera un ComboBox y el Segundo es un Numero y la rutina espera una cadena, por ejemplo la llamada correcta seria:

Call ComboAdd(MiCombo, "Lunes")

Saludos
hola erbuson!


Entonces si he entendido bien lo que realmente estas diciendo en esa funcion es que en un combobox como puede ser textbox u otro comando le añadas si es asi :

Public Sub TextAdd(Text As TextBox, Item As String) ?Aqui un texto en un Textbox

y aqui un

Public Sub ComboAdd(Combo As ComboBox, Item As String) 'Y aqui en un combo


o lo que definamos y le introducimos ese nuevo item igual que hicistes con el Msflexgrid, no que estemos haciendo un combobox especial.

O resumiendo estas llamando a un combo, text, label X( de los 1000 que puedas tener) y le insertamos el item que queremos, asi controlamos en cualquier momento cualquier combo, textbox, etc.

Es asi, no???

Un saludo
  #45 (permalink)  
Antiguo 03/05/2010, 04:06
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Pues si, mas o menos esta es la idea, ya que como cada Control, Objeto etc, tiene sus propias propiedades y algunas de ellas son diferentes de los demas, con esto estamos creando una Funcion o Procedimiento genérico que nos permite controlar los distintos elementos de nuestra aplicación.

Por ejemplo si a un objeto TextoBox intentaras aplicarte un AddItem evidentemente se produciría un error, de todos modos ten en cuenta que si tu defines que la rutina recibirá un Combo y le mandas un Text el mismo VB te informará del error.

Supongo que a partir de este punto estás viendo mas claro el porque de los procedimientos que tanto te costo pillar con el MsFlexGrid

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #46 (permalink)  
Antiguo 03/05/2010, 06:17
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Ok!

Ahora ya coge color el tema, ahora veo que si debo perder un par de horitas y aplicar todo lo que me has enseñado y ahorrarme problemas posteriores cuando empiece a unir todos los programillas en uno solo y no esperar a una nueva versión.

¿Como has visto mi chapuzilla, no me has comentado nada? , es que las criticas de masters para mi son muy constructivas y me ayudan a saber por donde no he de ir.

Un saludo
  #47 (permalink)  
Antiguo 03/05/2010, 10:00
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola Xyon:

He visto tu programa y si no nos detenemos a analizar el código la verdad es que parece conseguir su objetivo, no esta mal, le queda bastante por andar, veo que tienes previsiones de imprimir el grid y enviarlo a excel, tarea 'algo' complicada pero tampoco es que sea muy dificil se trata de captarle la idea, peroya hablaremos de ello si lo crees necesario en otro mensaje.

Respecto a lo que te decía del código supongo que si tuvieras que hacerlo de nuevo lo replantearías de distinta manera, pero hay una Rutina que me llama poderosamente la atención por como la has dejado y es la siguiente:

Private Sub VisualizarDatos()

'Mostramos los datos en las celdas
Select Case dia_C

Case "lunes"

MSFlexGrid.TextMatrix(0, 0) = fecha_C
MSFlexGrid.TextMatrix(1, 0) = inicio1_C
MSFlexGrid.TextMatrix(2, 0) = fin1_C
MSFlexGrid.TextMatrix(3, 0) = inicio2_C
MSFlexGrid.TextMatrix(4, 0) = fin2_C
MSFlexGrid.TextMatrix(5, 0) = inicio3_C
MSFlexGrid.TextMatrix(6, 0) = fin3_C
MSFlexGrid.TextMatrix(7, 0) = tiempo_C

Case "martes"

MSFlexGrid.TextMatrix(0, 1) = fecha_C
MSFlexGrid.TextMatrix(1, 1) = inicio1_C
MSFlexGrid.TextMatrix(2, 1) = fin1_C
MSFlexGrid.TextMatrix(3, 1) = inicio2_C
MSFlexGrid.TextMatrix(4, 1) = fin2_C
MSFlexGrid.TextMatrix(5, 1) = inicio3_C
MSFlexGrid.TextMatrix(6, 1) = fin3_C
MSFlexGrid.TextMatrix(7, 1) = tiempo_C

Case "miercoles"
MSFlexGrid.TextMatrix(0, 2) = fecha_C
MSFlexGrid.TextMatrix(1, 2) = inicio1_C
MSFlexGrid.TextMatrix(2, 2) = fin1_C
MSFlexGrid.TextMatrix(3, 2) = inicio2_C
MSFlexGrid.TextMatrix(4, 2) = fin2_C
MSFlexGrid.TextMatrix(5, 2) = inicio3_C
MSFlexGrid.TextMatrix(6, 2) = fin3_C
MSFlexGrid.TextMatrix(7, 2) = tiempo_C

Case "jueves"
MSFlexGrid.TextMatrix(0, 3) = fecha_C
MSFlexGrid.TextMatrix(1, 3) = inicio1_C
MSFlexGrid.TextMatrix(2, 3) = fin1_C
MSFlexGrid.TextMatrix(3, 3) = inicio2_C
MSFlexGrid.TextMatrix(4, 3) = fin2_C
MSFlexGrid.TextMatrix(5, 3) = inicio3_C
MSFlexGrid.TextMatrix(6, 3) = fin3_C
MSFlexGrid.TextMatrix(7, 3) = tiempo_C

Case "viernes"
MSFlexGrid.TextMatrix(0, 4) = fecha_C
MSFlexGrid.TextMatrix(1, 4) = inicio1_C
MSFlexGrid.TextMatrix(2, 4) = fin1_C
MSFlexGrid.TextMatrix(3, 4) = inicio2_C
MSFlexGrid.TextMatrix(4, 4) = fin2_C
MSFlexGrid.TextMatrix(5, 4) = inicio3_C
MSFlexGrid.TextMatrix(6, 4) = fin3_C
MSFlexGrid.TextMatrix(7, 4) = tiempo_C

Case "sabado"
MSFlexGrid.TextMatrix(0, 5) = fecha_C
MSFlexGrid.TextMatrix(1, 5) = inicio1_C
MSFlexGrid.TextMatrix(2, 5) = fin1_C
MSFlexGrid.TextMatrix(3, 5) = inicio2_C
MSFlexGrid.TextMatrix(4, 5) = fin2_C
MSFlexGrid.TextMatrix(5, 5) = inicio3_C
MSFlexGrid.TextMatrix(6, 5) = fin3_C
MSFlexGrid.TextMatrix(7, 5) = tiempo_C

Case "domingo"
MSFlexGrid.TextMatrix(0, 6) = fecha_C
MSFlexGrid.TextMatrix(1, 6) = inicio1_C
MSFlexGrid.TextMatrix(2, 6) = fin1_C
MSFlexGrid.TextMatrix(3, 6) = inicio2_C
MSFlexGrid.TextMatrix(4, 6) = fin2_C
MSFlexGrid.TextMatrix(5, 6) = inicio3_C
MSFlexGrid.TextMatrix(6, 6) = fin3_C
MSFlexGrid.TextMatrix(7, 6) = tiempo_C

End Select
End Sub


Mira lo que DEBERIAS haber hecho, y esta vez lo digo en voz alta, porque puedes cambiarlo, veras que su mantenimiento es mucho mas simple:

Private Sub VisualizarDatos()

'Mostramos los datos en las celdas
Dim Columna as Single
Select Case dia_C
Case "lunes": Columna = 0
Case "martes": Columna = 1
Case "miercoles": Columna = 2
Case "jueves": Columna = 3
Case "viernes": Columna = 4
Case "sabado": Columna = 5
Case "domingo": Columna = 6
End Select

MSFlexGrid.TextMatrix(0, Columna) = fecha_C
MSFlexGrid.TextMatrix(1, Columna) = inicio1_C
MSFlexGrid.TextMatrix(2, Columna) = fin1_C
MSFlexGrid.TextMatrix(3, Columna) = inicio2_C
MSFlexGrid.TextMatrix(4, Columna) = fin2_C
MSFlexGrid.TextMatrix(5, Columna) = inicio3_C
MSFlexGrid.TextMatrix(6, Columna) = fin3_C
MSFlexGrid.TextMatrix(7, Columna) = tiempo_C

End Sub



Tengo o no tengo razón. Venga hablamos.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #48 (permalink)  
Antiguo 04/05/2010, 01:06
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda por favor

Hola erbuson!

No se si ves la television o la evitas todo lo posible, si conoces la serie NCIS navy investigation, si la conoces pues me merezco lo que recibe continuamente el Tinosso, un coscorron o cachete en la nuca, siempre has tenido razón, la has tenido pero en especial en lo que acabas de comentar, hasta que no lo has posteado no me he dado cuenta de la parida tan grande, si es que la palabra grande tiene capacidad para aguantar la parida, en cuanto has puesto tu trozo de codigo, he visto ipsofacto que la columna se repetia 1000 veces y que tenia que apuntar hay. Mi unica escusa es que cuatro ojos ven mas que dos y mas si estos estan viciados y se han acostumbrado a la parida y se han quedado ciegos en ese punto. Supongo que como esta habran mil pero por eso aunque uno a hostias aprende si no se las enseñan, esta ciego y no las ve. Sigo estando abierto a criticas, cachetes y broncas.

Referente a lo de imprimir y enviar a excel es cierto, tengo previsión de ello y es la parte que dejaba para mis proximas versiones privadas , y desde luego ayuda necesitare aunque intentare documentarme bastante aunque tambien he visto muchos post que apuntan a esos temas, de todas maneras aqui tambien estaria fuera de lugar y confundiria mucho al resto del foro para poder hacer uso de ello; como comentas ya hablaremos de ello.Te he remitido un pdf a tu e-mail del anteproyecto de mi programa en pdf y asi comprenderas mas hacia donde voy.

Muchas gracias, he aprendido un poco mas.

Un saludo

Última edición por XYON126; 04/05/2010 a las 01:14

Etiquetas: favor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:46.