Extraer datos mediante un código, en un TextBox

Hola amigos tengo un pequeño inconveniente en este formulario de Excel, me gustaría trabajarlo de la manera que se presenta en el ejemplo.

1 respuesta

Respuesta
1

No das detalles pero, así a grandes rasgos, al parecer te podría ser útil usar "Find" o "Application.WorkSheetFunction.VlookUp" pero sería más fácil ayudarte sobre tus avances.

Abraham Valencia

Ok Gracias Abraham :

en TextBox1:

Private Sub TextBox1_Change()
'Por.Dante Amor
Set h = Sheets("Hoja1")
Set b = h.Columns("B").Find(TextBox1)
If Not b Is Nothing Then
TextBox2 = h.Cells(b.Row, "C")
End If

End Sub

en Textbox2:

Private Sub TextBox2_Change()
Set h = Sheets("Hoja2")
Set b = h.Columns("B").Find(TextBox1)
If Not b Is Nothing Then
TextBox2 = h.Cells(b.Row, "C")
End If
End Sub

en TextBox3:

Private Sub TextBox3_Change()
Set h = Sheets("Hoja2")
Set b = h.Columns("C").Find(TextBox2)
If Not b Is Nothing Then
TextBox3 = h.Cells(b.Row, "D")
End If

End Sub

en TextBox5

Private Sub TextBox5_Change()
TextBox5 = Val(TextBox3) * Val(TextBox4)
End Sub

Tampoco conozco la disposición de tus datos y por lo tanto, al ver el código que envías, parece repetitivo y hasta contradictorio.

¿En qué hoja u hojas están tus datos? ¿Cuál es su disposición?

Abraham Valencia

Te envío el vinculo para que puedas chequear realmente como lo estoy creando el formulario https://1drv.ms/x/s!AgdHb_KdAoGvgQNMZNPlMY4Hdiex

Primero quiero comentarte un par de cosas: Los "TextBox" como lo dice su nombre (en inglés), son cajas de texto, por lo tanto todo lo que hay en ellos para el VBA es texto y, cuando de número se trata y más aún cuando de operaciones aritméticas se trata, hay que tratarlo con relativo "cuidado". Lo del separador de decimales y miles, es otro cantar, ya que el VBA, como buen hijo de EE. UU., considera los "US Centric", así que yo, por si acaso, uso mucho el "Format" y el "Cdbl" en el ejemplo.

Ahora, este ejemplo es solo tomando en cuenta tus TextBox16, TextBox17, TextBox18, TextBox19 y TextBox20, entonces, primero borra TODOS los eventos asociados a ellos. Lo otro es que yo prefiero usar el evento, en casos como este, "KeyDown" para que al presionar "Enter" ocurra lo que necesites. Sé que algunas personas les gusta, hasta para estas cosas, el evento "change" pero te aseguro que podrá darte "sorpresas" y gasta "algo" más de memoria (insisto, para estos casos).

Entonces, prueba solo así:

Private Sub TextBox16_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 Dim Buscador As Variant
 Dim Ubicacion As String
 Dim Valor As Double
  If KeyCode <> vbKeyReturn Then
  Exit Sub
  End If
With Sheets("Hoja2").Range("B2:B41")
Set Buscador = .Find(TextBox16)
  If Buscador Is Nothing Then
  MsgBox "No existe"
  Exit Sub
  Else
  Let Ubicacion = Buscador.Address
  MsgBox Ubicacion
  TextBox17 = Sheets("Hoja2").Range(Ubicacion).Offset(0, 1)
  Valor = Sheets("Hoja2").Range(Ubicacion).Offset(0, 2)
  TextBox18 = Format(CDbl(Valor), "#,##0.00")
  End If
  End With
End Sub
Private Sub TextBox19_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Valor As Double, Valor2 As Double, Total As Double
  If KeyCode = vbKeyReturn Then
  Let Valor = CDbl(TextBox18)
  Let Valor2 = CDbl(TextBox19)
  Let Total = CDbl(Valor * Valor)
  TextBox20 = Format(CDbl(Total), "#,##0.00")
  End If
End Sub

Así, solo dos eventos. Ah, declararía las variables como del módulo, pero bueno, dado que es ejemplo las dejo ahí.

Comentas

Abraham Valencia

Corregir:

 Let Total = CDbl(Valor * Valor2)

Ah, y hay un "msgbox" colado, ya te darás cuenta

Abraham Valencia

Disculpa mi desconocimiento pero podridas ayudarme a aplicarlo al formulario    https://1drv.ms/f/s!AgdHb_KdAoGvgQLJjTs7wkKIV-NT 

Una recomendación sincera, es que si deseas trabajar con macros (VBA) le des una leidita más al tema, te aseguro que te ayudará mucho. Mientras tanto mira por aquí:

https://1drv.ms/x/s!ApkTgtnWCTgAizH726A9yxRBgL26 

Muchos salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas