Saltar al contenido

Sistema de Carga de Datos


Ramo72

Recommended Posts

publicado

Estimados

Necesito ayuda con mi "sistema". El mismo basicamente permite la carga validada, y controlada de ciertos datos, para luego emitir reportes con informacion consistente, clara, y bien establecida (esto ultimo mediante otro macro en otro archivo, que todavia no he realizado).

Digamos que hasta hace un mes y medio no sabia nada en absoluto de macros, asi que lo que he hecho es fruto de la ayuda de muchos foros (incluido este) y tutoriales varios. Un rejunte de todo eso, trabajo y adaptacion. Y algo de lectura de algunos manuales.

Ahora, lo que necesito son consejos, para mejorara su funcionabilidad, y rapidez de respuesta. Dado que en el aprendizaje siento que me atropelle un poco la infraestructura normal o adecuada de comandos, procedimientos, etc.

Y ademas necesito algun tipo de solucion para una cuestion que hace a lo que mencione antes. Cuando realizo la carga de datos de useform a celdas, desde un listbox con varios datos, todos los datos que agrego "extralistbox" quedan en la primer linea. Yo necesito, o repetirlos y copiarlos como valor para evitar la acumulacion de formulas, o tomar los datos sin celdas vacias. Pude plantear lo primero, pero no esta funcionando como deberia (pueden verlo cuando miren los codigos)

Tambien tengo un problemita en la validacion de la carga de los textbox "desde" y "hasta". Es decir nose si existe otra forma mas adecuada para la carga con formato hora (00:00), dado que la validacion que yo hice, no es completamente eficaz.

Solo pido consejos, algun tutorial que pueda mirar, orientacion, y cualquier otra ayuda que me puedan ofrecer. Pido que lo miren y espero comentarios.

PD:

Las contraseñas son:

AyudaExcel1 pass: AE1

AyudaExcel2 pass: AE2

AyudaExcel3 pass: AE3

AyudaExcel4 pass: AE4

AyudaExcel5 pass: AE5 (esta permite ver todas las hojas y desbloquea el archivo

AyudaExcel6 pass: AE6

Para ver el archivo lo pueden bajar de este link, dado que subirlo directo al foro no me lo permitia por que superaba el tamaño minimo de 150 kb.

http://www.2shared.com/file/RHqdMpz5/MO_online.html[/HTML]

Saludos.

MO.part1.rar

MO.part2.rar

MO.part3.rar

MO.part4.rar

publicado

Buenas.

Bueno dado que no ha habido respuesta empiezo a pensar que, el tema es muy complicado o muy largo, o incumple alguna reglamentacion, o el foro no trata con este tipo de casos.

Y dado que no puedo exigir respuesta pues me gustaria al menos, de alguien que sepa del tema, algun conocedor que tal vez no quiera o pueda responder por alguna de las causas antes mencionadas, que simplemente me indique o referencie hacia algun texto, sitio, tutoriales, etc que me ayude a mejorar los tiempos de procesamiento del archivo.

Por ejemplo metodos para reemplazar tanto loop. etc. y yo intentare entenderlos asi como he hecho con todo lo que he ido viendo para darle forma al macro este.

Saludos.

publicado

Hola Ramo,

He adjuntado los archivos con el cargador del Foro.

Relacionado a tu consulta he de decirte que son malas fechas para las consultas, pero son buenas fechas para los respondones (Másters) del Foro, ya que la inmensa mayoría de ellos están disfrutando de unas merecidas vacaciones.

Te ruego que tengas paciencia.

Saludos.

publicado

Bueno, luigi, he de tener paciencia.

Igualmente yo sigo trabajando y dandole vueltas al archivo asi que vamos con los avances:

Logre hacer que la copia de datos "extralistbox" sea eficaz.

Antes yo utilizaba, y de esta manera me cambiaba los datos que ya habian sido cargados por los nuevos.

 
[COLOR=#008000]'Loop que repite valores anteriores cuando se carga con listbox y los pega como valores
[/COLOR]Sheets("Carga").Range("BA3").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate

If [COLOR=#0000ff]ActiveCell.Offset(0, -2) <> "" [/COLOR]Then
ActiveCell.Offset(0, 0).FormulaR1C1 = "=REPT(R[-1]C,1)"
ActiveCell.Offset(0, 1).FormulaR1C1 = "=REPT(R[-1]C,1)"

End If
Loop
'Selecciona todo, copia y pega valores.
Range("BA3").Activate
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("BA3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
[/CODE]

Lo unico que hice es restringir mas el condicional y ahora funciona bien, es decir, no reemplaza los datos cargados previos a la carga actual

[CODE] [COLOR=#008000]'Loop que repite valores anteriores cuando se carga con listbox y los pega como valores
[/COLOR] Sheets("Carga").Range("BA3").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate

If [COLOR=#0000ff]ActiveCell.Offset(0, -2) <> "" And ActiveCell.Offset(-1, 0) <> "" And ActiveCell.Offset(0, 0) = "" [/COLOR]Then
ActiveCell.Offset(0, 0).FormulaR1C1 = "=REPT(R[-1]C,1)"
ActiveCell.Offset(0, 1).FormulaR1C1 = "=REPT(R[-1]C,1)"

End If
Loop

'Selecciona todo, copia y pega valores.
Range("BA3").Activate
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("BA3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
[/CODE]

[b]Aprovecho de paso para simplificar dos de los problemitas que estoy teniendo y con los que realmente necesito ayuda.

[/b]Tengo dos listboxs. En estos se debe poder carga horas en formato 00:00

es decir que ninguno de los datos de los listbox puede ser:

- caracter

- menor a 0

- mayor a 23:59 [color=#ff0000](implicando esto que a su vez los minutos nunca puedan ser mayores a 59, es decir que no pueda existir un 21:80 por ejemplo)

[/color]Ademas el primer listbox nunca debe poder ser superior en valor al segundo

yo he logrado hacer todo eso mediante el siguiente codigo, excepto lo que esta en rojo.

[CODE]Private Sub Hastatxt_Change()
On Error Resume Next
If Not IsNumeric(Right(Hastatxt, 1)) And Right(Hastatxt, 1) <> "/" Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
largo_entrada = Len(Hastatxt)
Select Case largo_entrada
Case 2
If Right(Hastatxt, 1) = ":" Then
Desdetxt = Left(Hastatxt, Len(Hastatxt) - 1)
Else
Hastatxt = Hastatxt & ":"
End If
Case 1
If Hastatxt.Text > 2 Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
Case 2
If Hastatxt.Text > 23 Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
Case 4
If Hastatxt.Text > "23:59" Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
End Select
If Len(Hastatxt) > 5 Then Hastatxt = Left(Hastatxt, 5)
If Len(Hastatxt) < 5 Or Hastatxt.Text <= Desdetxt.Text Then
Validarcommandi.Enabled = False
Validarcommandm.Enabled = False
Else
Validarcommandi.Enabled = True
Validarcommandm.Enabled = True
End If
If Len(Hastatxt) = 5 And Len(Replace(Hastatxt, ":", "")) < 3 Then
Hastatxt = Clear
End If
End Sub
[/CODE]

El segundo problemita

Tengo un command button que necesito que no llame a un userform cuando no selecciono nada de un listbox y otros textbox requeridos.

Yo realice este codigo

[CODE]Private Sub Validarcommandm_Click()
[COLOR=#008000]'evita la validacion previa al completamiento de los datos requeridos
[/COLOR]If [COLOR=#ff0000]Sheets("Form").Presentismolist.Selected(i) = False [/COLOR]Or Tipocom = "" Or Subtipocom = "" Or Desdetxt = "" Or Hastatxt = "" Then
MsgBox "Faltan datos por Ingresar", vbExclamation, "Ojo"
Exit Sub
Else
[COLOR=#008000]'evita la colocación de una fecha superior a la actual
[/COLOR] If CDate(Fechacal.Value) > Date Then
MsgBox "Fecha no puede ser mayor a la de hoy", vbExclamation, "Ojo"
Exit Sub
Else
If Tipocom = "Traspaso_Temporal" Or Tipocom = "Traspaso_Permanente" Then
If Haciacom = "" Then
MsgBox "Se requiere completar el campo Hacia", vbExclamation, "Ojo"
Exit Sub
End If
End If
End If
[COLOR=#008000]'llama userform de validacion y llama procedimeinto de limpieza
[/COLOR]Validación.Show
Call Clearform
End If
End Sub
[/CODE]

la parte en rojo no esta funcionando por que seleccionando o no ahora nunca llama al userform

Bueno espero alguien tenga una idea sobre esto asi ya voy dandole los ultimos retoques para comenzar con la otra parte !

Saludos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.