Bucle se dispara solo, no me copian los datos
Publicado por CARLOS HERRERA (2 intervenciones) el 20/12/2019 22:00:25
Hola buenas tardes
La verdad soy nuevo en esto del visual basic pero he estado trabajando en un archivo automatizado pero presento fallas que no puedo solventar, la idea de este archivo es que la hoja llamada PERSONAL contenga una base de datos de empleados y la hoja llamada HIJOS contenga los nombres de los hijos de los empleados relacionados con su debido padre o madre, en la hoja Personal solicito que cuando en la celda C5 se ponga la palabra si se despliegue un input que solicite la cantidad de veces que se va a abrir el form donde se pondrán los datos de los hijos y que a su vez en la hoja hijos una vez se ingrese la información en el form vayan quedando los registros con el nombre del padre o madre correspondientemente relacionados, pero los datos de los padres en algunas ocasiones se han pegado y en otras no, adicional el form se dispara cada vez que cambio de celda en la hoja PERSONAL y por ultimo cuando se pegan los datos del form estos se pegan no en la siguiente celda libre sino que se pegan sobre las celdas que ya tienen contenido, favor su ayuda para terminar este proyecto, de ante mano gracias.
SHEETS PERSONAL
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Range("C" & Rows.count).End(xlUp)
If Target.Value = "SI" Then
Call COPIAR
End If
If Target.Value = "SI" Then
Call INGRESAR
End If
End Sub
Sub COPIAR()
COPIARDATOS
End Sub
Sub INGRESAR()
Dim I As Integer
Dim intveces As Integer
intveces = InputBox("Ingresa el numero de hijos:", "Numero de Hijos", 0)
If intveces = 0 Then
Unload UserForm1
End If
For I = 1 To intveces
UserForm1.Show
Next I
End Sub
USERFORM1
Private Sub CERRAR_click()
Unload UserForm1
End Sub
Private Sub GUARDAR_click()
CREAREGISTROS
Unload UserForm1
End Sub
Sub CREAREGISTROS()
Dim contfila As Long
Dim cont As Long
Set hoja = Sheets("HIJOS")
If Trim$(TextBox1.Text) = Empty Or Trim$(TextBox2.Text) = Empty Then
MsgBox "POR", vbCritical, "datos imcompletos"
Exit Sub
End If
contfila = Sheets("HIJOS").Cells(Rows.count, 1).End(xlUp).Offset(0, 0).Row
hoja.Cells(contfila, 3).Value = UserForm1.TextBox1.Value
hoja.Cells(contfila, 4).Value = UserForm1.TextBox2.Value
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
End Sub
Private Sub UserForm_Click()
End Sub
MODULO4
Sub COPIARDATOS()
Dim nombre As String
Dim cedula As String
Dim cont As Long
Dim ultimafila As Long
Dim contfila As Long
Dim palabrabusqueda As String
Set Hoja2 = Worksheets("PERSONAL")
palabrabusqueda = SI
ultimafila = Sheets("PERSONAL").Range("A" & Rows.count).End(xlUp).Row
If ultimafila < 4 Then
Exit Sub
End If
For cont = 4 To ultimafila
If Sheets("PERSONAL").Cells(cont, 3) Like palabrabusqueda Then
nombre = Sheets("PERSONAL").Cells(contfila, 1).Value
cedula = Sheets("PERSONAL").Cells(contfila, 2).Value
contfila = Sheets("HIJOS").Range("A" & Rows.count).End(xlUp).Row
Sheets("HIJOS").Cells(contfila + 1, 1) = nombre
Sheets("HIJOS").Cells(contfila + 1, 2) = cedula
End If
Next cont
End Sub
La verdad soy nuevo en esto del visual basic pero he estado trabajando en un archivo automatizado pero presento fallas que no puedo solventar, la idea de este archivo es que la hoja llamada PERSONAL contenga una base de datos de empleados y la hoja llamada HIJOS contenga los nombres de los hijos de los empleados relacionados con su debido padre o madre, en la hoja Personal solicito que cuando en la celda C5 se ponga la palabra si se despliegue un input que solicite la cantidad de veces que se va a abrir el form donde se pondrán los datos de los hijos y que a su vez en la hoja hijos una vez se ingrese la información en el form vayan quedando los registros con el nombre del padre o madre correspondientemente relacionados, pero los datos de los padres en algunas ocasiones se han pegado y en otras no, adicional el form se dispara cada vez que cambio de celda en la hoja PERSONAL y por ultimo cuando se pegan los datos del form estos se pegan no en la siguiente celda libre sino que se pegan sobre las celdas que ya tienen contenido, favor su ayuda para terminar este proyecto, de ante mano gracias.
SHEETS PERSONAL
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Range("C" & Rows.count).End(xlUp)
If Target.Value = "SI" Then
Call COPIAR
End If
If Target.Value = "SI" Then
Call INGRESAR
End If
End Sub
Sub COPIAR()
COPIARDATOS
End Sub
Sub INGRESAR()
Dim I As Integer
Dim intveces As Integer
intveces = InputBox("Ingresa el numero de hijos:", "Numero de Hijos", 0)
If intveces = 0 Then
Unload UserForm1
End If
For I = 1 To intveces
UserForm1.Show
Next I
End Sub
USERFORM1
Private Sub CERRAR_click()
Unload UserForm1
End Sub
Private Sub GUARDAR_click()
CREAREGISTROS
Unload UserForm1
End Sub
Sub CREAREGISTROS()
Dim contfila As Long
Dim cont As Long
Set hoja = Sheets("HIJOS")
If Trim$(TextBox1.Text) = Empty Or Trim$(TextBox2.Text) = Empty Then
MsgBox "POR", vbCritical, "datos imcompletos"
Exit Sub
End If
contfila = Sheets("HIJOS").Cells(Rows.count, 1).End(xlUp).Offset(0, 0).Row
hoja.Cells(contfila, 3).Value = UserForm1.TextBox1.Value
hoja.Cells(contfila, 4).Value = UserForm1.TextBox2.Value
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
End Sub
Private Sub UserForm_Click()
End Sub
MODULO4
Sub COPIARDATOS()
Dim nombre As String
Dim cedula As String
Dim cont As Long
Dim ultimafila As Long
Dim contfila As Long
Dim palabrabusqueda As String
Set Hoja2 = Worksheets("PERSONAL")
palabrabusqueda = SI
ultimafila = Sheets("PERSONAL").Range("A" & Rows.count).End(xlUp).Row
If ultimafila < 4 Then
Exit Sub
End If
For cont = 4 To ultimafila
If Sheets("PERSONAL").Cells(cont, 3) Like palabrabusqueda Then
nombre = Sheets("PERSONAL").Cells(contfila, 1).Value
cedula = Sheets("PERSONAL").Cells(contfila, 2).Value
contfila = Sheets("HIJOS").Range("A" & Rows.count).End(xlUp).Row
Sheets("HIJOS").Cells(contfila + 1, 1) = nombre
Sheets("HIJOS").Cells(contfila + 1, 2) = cedula
End If
Next cont
End Sub
Valora esta pregunta


0