consulta

Jose
17 de Junio del 2004
Tengo una duda tengo este programa pero esta muy largo y tengo ke reducirlo y esto es lo ke mas puedo reducirlo


Private Sub calculoMate_Click()
CalculosMatematicos.Show
Unload Me
End Sub


Private Sub ComboRegion_Click()
'MsgBox ComboRegion.ItemData(ComboRegion.ListIndex)
ComboCiudad.Clear
If ComboRegion.ItemData(ComboRegion.ListIndex) = 1 Then
ComboCiudad.AddItem ("Arica")
ComboCiudad.AddItem ("Iquique")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 2 Then
ComboCiudad.AddItem ("Tocopilla")
ComboCiudad.AddItem ("Antofagasta")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 3 Then
ComboCiudad.AddItem ("Chañaral")
ComboCiudad.AddItem ("Copiapo")
ComboCiudad.AddItem ("Huasco")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 4 Then
ComboCiudad.AddItem ("Elqui")
ComboCiudad.AddItem ("Limari")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 5 Then
ComboCiudad.AddItem ("Los Andes")
ComboCiudad.AddItem ("Quillota")
ComboCiudad.AddItem ("Valparaiso")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 6 Then
ComboCiudad.AddItem ("Cachapoal")
ComboCiudad.AddItem ("Colchagua")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 7 Then
ComboCiudad.AddItem ("Curico")
ComboCiudad.AddItem ("Talca")
ComboCiudad.AddItem ("Linares")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 8 Then
ComboCiudad.AddItem ("Ñiuble")
ComboCiudad.AddItem ("Bio Bio")
ComboCiudad.AddItem ("Concepcion")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 9 Then
ComboCiudad.AddItem ("Malleco")
ComboCiudad.AddItem ("Cautin")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 10 Then
ComboCiudad.AddItem ("Valdivia")
ComboCiudad.AddItem ("Osorno")
ComboCiudad.AddItem ("Chiloe")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 11 Then
ComboCiudad.AddItem ("Coihaique")
ComboCiudad.AddItem ("Aisen")
ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 12 Then
ComboCiudad.AddItem ("Magallane")
ComboCiudad.AddItem ("Tierra del Fuego")
ComboCiudad.AddItem ("Antartica Chilena")

ElseIf ComboRegion.ItemData(ComboRegion.ListIndex) = 13 Then
ComboCiudad.AddItem ("Santiago")
ComboCiudad.AddItem ("Maipo")
ComboCiudad.AddItem ("Talagante")
End If
End Sub

Private Sub CMD_Aplicar_Click()
' "glb_masculino,glb_femenino,glb_menor15,glb_entre16_20,entre_21_25,glb_estudia,glb_no_estudia,glb_trabaja,_glb_no_trabaja"
If OptionMasculino.Value = True Then
Sex(glb_sexo) = "M"
glb_sexo = glb_sexo + 1
End If
If OptionFemenino.Value = True Then
Sex(glb_sexo) = "F"
glb_sexo = glb_sexo + 1
End If
If Opt_si.Value = True Then
educacion(glb_educacion) = "S"
glb_educacion = glb_educacion + 1
End If
If Opt_no.Value = True Then
educacion(glb_educacion) = "N"
glb_educacion = glb_educacion + 1
End If
If opt_trabaja_si.Value = True Then
laboral(glb_educacion) = "S"
glb_laboral = glb_laboral + 1
End If
If opt_trabaja_no.Value = True Then
laboral(glb_educacion) = "N"
glb_laboral = glb_laboral + 1
End If
If Opt1.Value = True Then
Eda(glb_edad) = "15"
glb_edad = glb_edad + 1
End If
If Opt2.Value = True Then
Eda(glb_edad) = "1620"
glb_edad = glb_edad + 1
End If
If Opt3.Value = True Then
Eda(glb_edad) = "2125"
glb_edad = glb_edad + 1
End If
OptionMasculino.Value = False
OptionFemenino.Value = False
Opt_si.Value = False
Opt_no.Value = False
opt_trabaja_si.Value = False
opt_trabaja_no.Value = False
Opt1.Value = False
Opt2.Value = False
Opt3.Value = False
opt

End Sub

Private Sub entre16_Click()
m = 0
For i = 1 To 50
If Eda(i) = "1620" Then
m = m + 1
End If
Next
MsgBox "La Cantidad de entre 16 y 20 es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub entre21_Click()
m = 0
For i = 1 To 50
If Eda(i) = "2025" Then
m = m + 1
End If
Next
MsgBox "La Cantidad de entre 20 y 25 es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub Form_Load()
glb_sexo = 1
glb_educacion = 1
glb_laboral = 1
glb_edad = 1

End Sub

Private Sub menor_Click()
m = 0
For i = 1 To 50
If Eda(i) = "15" Then
m = m + 1
End If
Next
MsgBox "La Cantidad de menores de 15 es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub Notrabaja_Click()
m = 0
For i = 1 To 50
If laboral(i) = "N" Then
m = m + 1
End If
Next
MsgBox "La Cantidad que no trabajan es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub princi_Click()
Principal.Show
Unload Me
End Sub

Private Sub Salir_Click()
Unload Me
End Sub

Private Sub sexofeme_Click()
m = 0
For i = 1 To 50
If Sex(i) = "F" Then
m = m + 1
End If
Next

MsgBox "La Cantidad de sexo Femenino es" + Str(m), , "Resultado de encuesta"

End Sub

Private Sub sexomascu_Click()
m = 0
For i = 1 To 50
If Sex(i) = "M" Then
m = m + 1
End If
Next
MsgBox "La Cantidad de sexo masculino es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub Siestudin_Click()
m = 0
For i = 1 To 50
If educacion(i) = "S" Then
m = m + 1
End If
Next
MsgBox "La Cantidad que estudian es" + Str(m), , "Resultado de encuesta"
End Sub

Private Sub trabaja_Click()
m = 0
For i = 1 To 50
If laboral(i) = "S" Then
m = m + 1
End If
Next
MsgBox "La Cantidad que trabajan es" + Str
m), , "Resultado de encuesta"
End Sub

buen se trata de lo siguiente lo ke les mando es un formulario para medir encuesta mediante unos vectores pero puedo reducirlo un poco mas poniendole por ejemplo ke si no es hombre es mujer en un puro if ó si trabaja o no trabaja en un solo if.

esperando una respuesta
saludos y gracias de ante mano


silf
17 de Junio del 2004
en tiempo de diseño siempre deja una opción de las dos a true, por ejemplo, en masculino y femenino, deja masculino, de forma que siempre aparezca una opción marcada, si el usuario la cambia, masculino será false y femenino true, entonces simplemente comprobando uno ya sabes el otro porque no se pueden dejar 2 optionbutton sin marcar, o está uno o está otro, entonces, para el caso de sexo por ejemplo con hacer:
If OptionMasculino.Value = True Then
Sex(glb_sexo) = "M"
glb_sexo = glb_sexo + 1
else
Sex(glb_sexo) = "F"
glb_sexo = glb_sexo + 1
End If

te sobra, y así para todos los optionbutton que vayan en parejas

Cuando tengas un grupo de optionbuttons de más de dos, como en el caso de la edad, te recomiendo que lo hagas con un combobox, así, no tienes que comprobar los tres (o los que tengas) únicamente coges el "value" y ya lo tienes hecho.
Espero haberte servido de ayuda.

1 saludo

Juan
17 de Junio del 2004
Pues hay algunas cosas que se pueden hacer.

Primero, en el evento click de ComboRegion, en lugar
de usar la instrucción If...ElseIf...ElseIf... deberías usar

Select Case ComboRegion.ItemData(ComboRegion.ListIndex)
Case 1
....
Case 2
....
Case N
End Select

Segundo, En CMD_Aplicar_Click, además de simplificar
utilizando un If para cada pareja de Options, como ya
te han dicho, también puedes sacar la instrucción de
incrementar el contador fuera del If, de esta forma
sólo la tienes que escribir una vez. Ejemplo:

If OptionMasculino.Value = True Then
Sex(glb_sexo) = "M"
Else
Sex(glb_sexo) = "F"
End If
glb_sexo = glb_sexo + 1

O incluso podrías sustituir la instrucción If por la función
IIf y quedaría así:

Sex(glb_sexo) = IIf(OptionMasculino.Value,"M","F")
glb_sexo = glb_sexo + 1

Tercero, la rutina que utilizas para mostrar los datos
es idéntica en todos los casos, deberías hacer un
procedimiento aparte, y llamarlo desde cada evento
enviando distintos parámetros. El procedimiento
podría ser algo así:

Private Sub mostrarDato(Byval comparar As String, Byval mensaje As String, matriz As Variant)
Dim m As Integer, i As Integer
m = 0
For i = 1 To 50
If matriz(i) = comparar Then
m = m + 1
End If
Next i
MsgBox mensaje + Str(m), , "Resultado de encuesta"
End Sub

Y para llamarlo podrías hacer esto en los eventos Click:

Private Sub entre16_Click()
mostrarDato "1620", "La Cantidad de entre 16 y 20 es", Eda
End Sub