userform....de fila en fila

12/07/2006 - 21:05 por MARCO6325 | Informe spam
Buenas a todo el grupo...
tengo un userform que copia los datos de una hoja en varios texbox al
activar un comandbutton, quiero crear un comandbutton que se llame
Siguiente, para que cargue los datos de la siguiente fila, y cuando no
existan mas datos me de un mensaje q me diga que no hay mas datos...les
escribo el código que copia los datos de la hoja al userform:

Private Sub CommandButton3_Click()
Sheets("..").Select
TextBox1.Value = Range("a4")
TextBox2.Value = Range("b4")
TextBox3.Value = Range("c4")
TextBox4.Value = Range("d4")
TextBox5.Value = Range("j4")
TextBox6.Value = Range("g4")
TextBox7.Value = Range("h4")
TextBox8.Value = Range("i4")
TextBox9.Value = Range("e4")
TextBox10.Value = Range("f4")
TextBox11.Value = Range("k4")
TextBox12.Value = Range("k4")
TextBox13.Value = Range("a2")
End Sub
quiero que si ejecute el comandbutton llamado siguiente, me cambie los
datos por los de la fila 5, y asi sucesivamentey si es posible,
crear otro para devolverme a la fila anterior
muchas gracias de antemano por su atención

Preguntas similare

Leer las respuestas

#1 klomkbock
13/07/2006 - 00:03 | Informe spam
Hola Marco

Mira a ver si te vale lo siguiente, aunque no te fies mucho y ve con
tiento.

El siguiente codigo presupone un userform con 13 textbox, de los cuales 12
se rellenan con (incialmente) los datos de A:K de la fila de la celda
activa, y el 13 siempre con "A2" segun tu demanda, tambien presupone dos
commandbutton ( el 1 =>anterior y el 3 => siguiente) y un tercero para
cancelar (=> el 2)

Option Explicit
Dim y As Long, x As Byte
Private Sub CommandButton1_Click()
With Worksheets("Hoja1")
If y < 5 Then
CommandButton1.Enabled = False
MsgBox ("No hay registros anteriores")
Exit Sub
Else
y = y - 1
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton3_Click()
With Worksheets("Hoja1")
If y > .[a65536].End(xlUp).Row - 1 Then
CommandButton3.Enabled = False
MsgBox ("No hay registros posteriores")
Exit Sub
Else
y = y + 1
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
With Worksheets("Hoja1")
y = ActiveCell.Row
If y < 5 Then
y = 4
CommandButton1.Enabled = False
ElseIf y > .[a65536].End(xlUp).Row Then
y = .[a65536].End(xlUp).Row
CommandButton3.Enabled = False
Else
CommandButton1.Enabled = True
CommandButton3.Enabled = True
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
Application.ScreenUpdating = True
End Sub

Espero que te sirva, y lo dicho, ve con ojo, pues no soy un experto en
estas lides.

Un saludo y hasta pronto.
Ivan
Respuesta Responder a este mensaje
#2 klomkbock
13/07/2006 - 00:15 | Informe spam
Hola de nuevo Marco

Diculpame, pero parezco tener una preocupante tendencia a no poder poner
un solo mensaje para una respuesta o una consulta.

En los codigos de los botones añade lo siguiente:

codigo boton anterior
detras de: "else" pon: CommandButto1.Enabled = True

codigo boton siguiente
detras de: "else" pon: CommandButton3.Enabled = True

(podrias eliminar los mensajes de aviso pues los botones estarian
dehabilitados y no seria posible avanzar/retroceder)

Un saludo y hasta pronto
Ivan

PD ten por seguro que, aparte de ser muy mejorables (los codigos) todavia
pueden aprecer pegas.
Respuesta Responder a este mensaje
#3 klomkbock
13/07/2006 - 15:14 | Informe spam
Hola MARCO

como no hay dos sin tres, y aunque no estoy muy seguro de que estes
siguiendo el hilo, cambia todo el codigo por este, que creo que ya puede
valer

Option Explicit
Dim y As Long, x As Byte
Private Sub CommandButton1_Click()
With Worksheets("Hoja1")
If y < 5 Then
Exit Sub
Else
y = y - 1
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton3_Click()
With Worksheets("Hoja1")
If y > .[a65536].End(xlUp).Row - 1 Then
Exit Sub
Else
y = y + 1
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub
Private Sub TextBox1_Change()
With Worksheets("Hoja1")
If y > 4 And y < .[a65536].End(xlUp).Row Then
CommandButton1.Enabled = True
CommandButton3.Enabled = True
ElseIf y < 5 And .[a65536].End(xlUp).Row < 5 Then
CommandButton1.Enabled = False
CommandButton3.Enabled = False
ElseIf y < 5 And .[a65536].End(xlUp).Row > 4 Then
CommandButton1.Enabled = False
CommandButton3.Enabled = True
ElseIf y > .[a65536].End(xlUp).Row - 1 And .[a65536] _
.End(xlUp).Row > 4 Then
CommandButton1.Enabled = True
CommandButton3.Enabled = False
End If
End With
End Sub

Private Sub UserForm_Activate()
Application.ScreenUpdating = False
With Worksheets("Hoja1")
y = ActiveCell.Row
If y < 5 Then
y = 4
CommandButton1.Enabled = False
ElseIf y > .[a65536].End(xlUp).Row Then
y = .[a65536].End(xlUp).Row
CommandButton3.Enabled = False
Else
CommandButton1.Enabled = True
CommandButton3.Enabled = True
End If
For x = 1 To 12
Me.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
Application.ScreenUpdating = True
End Sub

Un saludo
ivan
Respuesta Responder a este mensaje
#4 MARCO6325
13/07/2006 - 15:32 | Informe spam
Hola Ivan.lo probé y no hace nada...le borre los msgbox e igual no
se activan los botones :s asi tengo el código..y le cambié los
nombres a los commandbutton por los reales. Commandbutton7 = Anterior,
Commandbutton4 = Siguiente y el cancelar.lo omití..porq ya tengo
un boton para salir y cambié el nombre e la hoja por la real


Option Explicit
Dim y As Long, x As Byte
Private Sub CommandButton7_Click()
With Worksheets("Obra")
If y < 5 Then
CommandButton7.Enabled = False
Exit Sub
CommandButton7.Enabled = True
Else
y = y - 1
End If
For x = 1 To 12
busqueda.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub

Private Sub CommandButton4_Click()
With Worksheets("Obra")
If y > .[a65536].End(xlUp).Row - 1 Then
CommandButton4.Enabled = False
Exit Sub
CommandButton4.Enabled = True
Else
y = y + 1
End If
For x = 1 To 12
busqueda.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
End Sub
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
With Worksheets("Obra")
y = ActiveCell.Row
If y < 5 Then
y = 4
CommandButton7.Enabled = False
ElseIf y > .[a65536].End(xlUp).Row Then
y = .[a65536].End(xlUp).Row
CommandButton4.Enabled = False
Else
CommandButton7.Enabled = True
CommandButton4.Enabled = True
End If
For x = 1 To 12
busqueda.Controls("TextBox" & x) = .Range("a" & y)(1, x).Value
Next
TextBox13 = .Range("a2").Value
End With
Application.ScreenUpdating = True
End Sub
Respuesta Responder a este mensaje
#5 MARCO6325
13/07/2006 - 16:15 | Informe spam
Ahhhh y los datos en la hoja "obras" estan ordenados en filas, no por
columnas que es como creo que busca los datos para llenar el userform

For x = 1 To 12
busqueda.Controls("TextBox" & x) = .Range("a" & x)(1, x).Value
Next
TextBox13 = .Range("a2").Value



creo que esta copiando en forma vertical y no horizontalcomo
deberia de ser...desde (a,"valor de fila anterior") hasta (K, "mismo
valor fila")

quisiera que por ejemplo(imaginate q esto es la hoja):
Nº de Fila--A B--C D E
F G H IJK
1--CASA--450KJK.ETC
2--CASA--50--1DFETC
3--CASA--22--3--KJ.ETC
4--CASA--15--6POETC

El botón anterior debería si estoy en la fila 4 cuando lo accione,
mostrar los datos de la fila 3 y asi sucesivamentehasta llegar a la
fila 1, y el boton siguiente , si estoy en la fila 2 al accionarlo, ir
a la 3 y luego al accionarlo de nuevo...hasta la fila 4...me imagino q
es con un contador..pero no se de los comandos de VB
gracias por todo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida