Buenas tardes, por favor quiero escribir en un Textbox los numero siguientes 16741583, 167415835, 8050310232 bueno lo que quiero es que cuando ingrese números de 8 dígitos me lo escriba en una celda 16.741.583 si es de 9 Dígitos 16.741.583-5 y si es de 10 Dígitos 805.031.023-2, gracias por ayudarme
Suponiendo que la hoja fuera Hoja1, la celda A1, que el cuadro de texto se llamara TextBox1 y el botón CommandButton1, el código podría ser: Private Sub CommandButton1_Click() With Worksheets("Hoja1") 'La hoja donde está la celda Select Case Len(Me.TextBox1.Value) Case 8 .Range("A1").Value = Format(Me.TextBox1.Value, "#,##0") Case 9 .Range("A1").Value = Format(Left(Me.TextBox1.Value, 8), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) Case 10 .Range("A1").Value = Format(Left(Me.TextBox1.Value, 9), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) End Select End With End Sub
Gracias por la respuesta, pero podrías decirme como hago ver este formato en el TextBox es cuestión de ver que esta escribiendo bien, explico lo que sucede es que en colombia tenemos nuestro numero de identificación (16.741.583) pero también nos autorizan Facturar y poner un dígito más para poder facturar (16.741.583-2) y cuando se trata de una empresa (805.031.023-2) entonces cuando un este digitando pueda ver que esta en lo correcto, bueno muchas gracias por lo que me puedas ayudar
Hasta donde yo sé, no es posible establecer un formato para un textbox que vaya mostrándose según se edita el control. Para hacer más o menos lo que necesitas tienes 2 posibilidades. La primera sería que al terminar de editar el textbox el código del formulario se encargue de darle formato, algo como: Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Select Case Len(Me.TextBox1.Value) Case Is < 9 Me.TextBox1.Value = Format(Me.TextBox1.Value, "#,##0") Case 9 Me.TextBox1.Value = Format(Left(Me.TextBox1.Value, 8), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) Case 10 Me.TextBox1.Value = Format(Left(Me.TextBox1.Value, 9), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) End Select End Sub Otra posibilidad (que es compatible con la anterior) es situar una etiqueta (pongamos que se llame Label1) al lado del control, y en esa etiqueta ir actualizando "en tiempo real" lo que se introduce en el textbox. El código sería: Private Sub TextBox1_Change() Select Case Len(Me.TextBox1.Value) Case Is < 9 Me.Label1.Caption = Format(Me.TextBox1.Value, "#,##0") Case 9 Me.Label1.Caption = Format(Left(Me.TextBox1.Value, 8), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) Case 10 Me.Label1.Caption = Format(Left(Me.TextBox1.Value, 9), "#,##0") & "-" & Right(Me.TextBox1.Value, 1) End Select End Sub