Como adicionar registros con una macro

Respuesta de
a
Usuario
Hola recién inicio en esta página y veo que tu habilidad en excel es asombrosoza

Actualmente estoy realizando desde una macro, la selección de datos los cuales deben quedar almacenados en una hoja excel, el código utilizado para ello es el siguiente

Dim P As Integer
Dim internas As Integer
Dim externas As Integer
Dim satisfac As Integer
Dim Mmayor As Integer
Dim Mmenor As Integer
Dim actividad As Integer
Dim tiempoa As Integer
Dim Nestudio As Integer
Dim Tconfiar As Integer
Dim Edad As Integer
Dim Ecivil As Integer
Dim Pcargo As Integer
Dim Tvivien As Integer
Dim Ltelefono As Integer
Dim Menosd As Integer
Dim Masd As Integer
Dim eg As Double
Dim x As Double
Dim y As Double
Dim h As Double
Dim cupo As Long
Dim ed As Double
Dim a As Double

Private Sub CommandButton1_Click()
P = 0
cupo = 0
internas = 0
externas = 0
satisfac = 0
Mmayor = 0
Mmenor = 0
actividad = 0
tiempoa = 0
Nestudio = 0
Tconfiar = 0
Edad = 0
Ecivil = 0
Pcargo = 0
Tvivien = 0
Ltelefono = 0
Menosd = 0
Masd = 0

If ComboBox6.ListIndex = 0 Or ComboBox6.ListIndex = 9 Or ComboBox6.ListIndex = 15 Then
' Formula Boyaca
' experiencias internas
If TextBox5 < 0 Then
MsgBox ("Rectifique experiencias internas")
Else
If ((Val(TextBox5.Text)) < 1) Then
internas = 15
Else
If ((Val(TextBox5.Text)) <= 2) Then
internas = 25
Else
If ((Val(TextBox5.Text)) = 3) Then
internas = 40
Else
internas = 50
End If
End If
End If
End If

' Experiencias Externas

If TextBox4 < 0 Then
MsgBox ("Rectifique experiencias externas")
Else
If TextBox4.Text = 0 Then
externas = 8
Else
If TextBox4.Text <= 2 Then
externas = 16
Else
If TextBox4.Text = 3 Then
externas = 28
Else
externas = 40
End If
End If
End If
End If


'Experiencias satisfactorias
If (Val(TextBox5.Text) + Val(TextBox4.Text)) < Val(TextBox3.Text) Then
MsgBox ("Rectifique suma de experiencias internas y externas")
Else
If TextBox3 < 0 Then
MsgBox ("Rectifique experiencias satisfactorias")
Else
If TextBox3.Text = 0 Then
satisfac = 16
Else
If TextBox3.Text <= 2 Then
satisfac = 24
Else
If TextBox3.Text = 3 Then
satisfac = 42
Else
satisfac = 60
End If
End If
End If
End If
End If

'moras mayores

If TextBox1.Text < 0 Then
MsgBox ("Rectifique moras mayores")
Else
If TextBox1.Text = 0 And (TextBox5 + TextBox4 > 0) Then
Mmayor = 50
Else
If (TextBox1.Text = 0 And (TextBox5 + TextBox4 = 0)) Then
Mmayor = 25
Else
If TextBox1.Text >= 1 Then
Mmayor = -400
End If
End If
End If
End If

' Moras menores

If TextBox2.Text < 0 Then
MsgBox ("Rectifique moras menores")
Else
If TextBox2.Text = 0 And (TextBox5 + TextBox4 > 0) Then
Mmenor = 50
Else
If (TextBox2.Text = 0 And (TextBox5 + TextBox4 = 0)) Then
Mmenor = 25
Else
If TextBox2.Text = 1 Then
Mmenor = -150
Else
If TextBox2.Text >= 2 Then
Mmenor = -400
End If
End If
End If
End If
End If


'Tipo de actividad
If ComboBox1.ListIndex = 0 Then actividad = 80
If ComboBox1.ListIndex = 1 Then actividad = 160
If ComboBox1.ListIndex = 2 Then actividad = 15

' Tiempo en la actividad
If ComboBox2.ListIndex = 0 Then tiempoa = 10
If ComboBox2.ListIndex = 1 Then tiempoa = 40
If ComboBox2.ListIndex = 2 Then tiempoa = 30

'Nivel de estudios
If ComboBox5.ListIndex = 0 Then Nestudio = 3
If ComboBox5.ListIndex = 1 Then Nestudio = 14
If ComboBox5.ListIndex = 2 Then Nestudio = 18
If ComboBox5.ListIndex = 3 Then Nestudio = 21
If ComboBox5.ListIndex = 4 Then Nestudio = 27
'TIEMPO EN CONFIAR
If TextBox8.Text < 12 Then
Tconfiar = 10
Else
If TextBox8.Text < 36 Then
Tconfiar = 45
Else
Tconfiar = 100
End If
End If

'edad
If TextBox6.Text < 18 Then
MsgBox ("menor de edad")
Else
If TextBox6 < 25 Then
Edad = 10
Else
If TextBox6 <= 40 Then
Edad = 90
Else
If TextBox6 <= 50 Then
Edad = 40
Else
Edad = 65
End If
End If
End If
End If

' estado civil
If ComboBox3.ListIndex = 0 Then Ecivil = 50
If ComboBox3.ListIndex = 1 Then Ecivil = 35
If ComboBox3.ListIndex = 2 Then Ecivil = 30
If ComboBox3.ListIndex = 3 Then Ecivil = 45
If ComboBox3.ListIndex = 4 Then Ecivil = 40

'PERSONAS A CARGO
If TextBox7.Text = 0 Then
Pcargo = 12
Else
If TextBox7.Text <= 3 Then
Pcargo = 120
Else
Pcargo = 66
End If
End If

'Tipo de vivienda
If ComboBox4.ListIndex = 0 Then Tvivien = 70
If ComboBox4.ListIndex = 1 Then Tvivien = 55
If ComboBox4.ListIndex = 2 Then Tvivien = 39
If ComboBox4.ListIndex = 3 Then Tvivien = 23
If ComboBox4.ListIndex = 4 Then Tvivien = 7

'Lineas Telefonicas
If TextBox9.Text = 0 Then Ltelefono = 0
If TextBox9.Text = 1 Then Ltelefono = 10
If TextBox9.Text >= 2 Then Ltelefono = 20


'endeudamiento
If CheckBox1.Value = True Then
TextBox10.Text = 0.15 * TextBox26.Text * ((TextBox7.Text / 2) + 1)
eg = (Val(TextBox10.Text) + Val(TextBox11.Text) + Val(TextBox12.Text) + (Val(TextBox13.Text) / 2))
ed = eg / Val(TextBox14.Text)
TextBox16.Text = Format(ed, "0.00%")
TextBox15.Text = Val(TextBox14.Text) - eg
Else
TextBox10.Text = 0.15 * (Val(TextBox26.Text)) * (Val(TextBox7) + 1)
eg = (Val(TextBox10.Text) + Val(TextBox11.Text) + Val(TextBox12.Text) + (Val(TextBox13.Text)))
ed = eg / Val(TextBox14.Text)
TextBox16.Text = Format(ed, "0.00%")
TextBox15.Text = Val(TextBox14.Text) - eg

End If

' Menos de 2 salarios de ingreso

If TextBox14.Text < 2 * TextBox26.Text Then
If ed < 0.6 Then
Menosd = 160
Else
If ed <= 0.7 Then
Menosd = 115
Else
If ed <= 0.8 Then
Menosd = 60
Else
If ed <= 0.9 Then
Menosd = 0
Else
Menosd = -350
End If
End If
End If
End If

Else
' Mas de 2 salarios de ingreso
If ed < 0.5 Then
Masd = 160
Else
If ed <= 0.6 Then
Masd = 110
Else
If ed <= 0.7 Then
Masd = 60
Else
If ed <= 0.8 Then
Masd = 0
Else
Masd = -350
End If
End If
End If
End If
End If
End If

Private Sub CommandButton2_Click()
Dim dato
dato = 2
Hoja3.Select
Range("A1") = internas
Range("B1") = externas
Range("C1") = satisfac
Range("D1") = internas
End Sub

Como incremento el rango columna en la medida que ingreso estas cuatro variables y la fila cuando deseo comenzar.

Gracias por la ayuda que puedas brindarme.
Avatar
Experto

Hola, Jorge!

Tal vez con tantas líneas de código y sin conocer tu formulario, calculo que tu pregunta final apunta a poder determinar dónde dejar los resultados de las selecciones. Así, donde dice:
Range("A1") = internas
Diga la línea siguiente a la ocupada por el último dato.

Si, por casualidad, esta fuera tu duda, suelo determinar esa posición en el mismo macro que lanza el formulario (que no veo entre lo que enviaste). Algo así como:

Public HojaDest, LCol, LCell

Sub FormCarga()
'==================
HojaDest = "Hoja3"
Firstcell = "A1"
'==================
Sheets(HojaDest).Select
Range(Firstcell).Select
LCol = Selection.Column
LCell = Selection.Row
LCell = LCell + Selection.CurrentRegion.Rows.Count
UserForm1.Show
End Sub

(Hay dos variables entre las lineas de ==== que deberás reemplazar por tus datos propios. Corresponden a la hoja donde se deben volcar los datos y la primer celda superior de la derecha donde comienza tu tabla)

Esta macro sirve para identificar la última celda ocupada en la hoja de carga y luego activa el formulario.

Obviamente, si se seguirán ingresando datos durante la ejecución del formulario, luego de efectuar un vuelco de datos en la hoja, tendrás que agregar una linea que incremente la variable LCell.
O sea:
LCell = LCell + 1

De todas maneras, cada vez que ingresas, la macro recuenta las líneas ocupadas.

Bueno, Jorge, pruébalo y dime si es esto lo que necesitabas.

Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.

Un abrazo!
Fernando




*====================================*
La presente respuesta ha demandado un tiempo de lectura,
análisis, elaboración y redacción. A cambio, simplemente,
pretendo que te tomes un minuto para FINALIZARLA, si
hubiera satisfecho -en alguna medida- tu requerimiento.
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó. Gracias...
*====================================*





Usuario
Apreciado fernando

Probé tu código y funciono solo que siempre queda en la fila1 columna A.

Tal vez no fui lo suficientemente claro
Con mi inquietud, espero no te molestes es que recién inicio en esto de macros y son muchos mis vacíos.

El trabajo consiste en que voy ingresando una cantidad de datos los cuales deben ser almacenados en una fila y en columnas diferentes algo así como fila1colA, ¿fila1colB... fila1col?
Luego debo pasar a la siguiente fila vacía y ubicarme en la columna de incinio para continuar almacenando datos.

Al iniciar el formulario debo establecer la primera fila vacía y ubicarme en la columna para continuar almacenando datos.