¿Cómo hago para añadir en una nueva hoja de calculo?VBA

Tengo el siguiente código que copie de un ejemplo que descargue pero cuando quiero añadir lo que hace es hacerlo en la misma hoja de calculo toda la información de las textbox, ¿cómo haría para hacer que cada vez que añada un nuevo cliente aparezca en una nueva hoja de calculo?
Public ubica As String
Public control As Byte
Public filalibre As Integer
Public ind As Byte
Private Sub CheckBox1_Click()
End Sub
Private Sub cmdAceptar_Click()
'controlo si se trata de un reg nuevo o del desplegable
If ubica = "" Then Exit Sub
If control > 0 Then
    'guardo cambios al registro
    Sheets("Hoja2").Range(ubica).Offset(0, 1).Value = TextBox2
    Sheets("Hoja2").Range(ubica).Offset(0, 2).Value = TextBox3
      control = 0
Else
    'creo nuevo registro
    'ubico cuál es la primer fila libre
    filalibre = Sheets("Hoja2").Range("A65500").End(xlUp).Row + 1
    Sheets("Hoja2").Cells(filalibre, 1).Value = TextBox1
    Sheets("Hoja2").Cells(filalibre, 2).Value = TextBox2
    Sheets("Hoja2").Cells(filalibre, 3).Value = TextBox3
    'actualizo rango del combobox
    ComboBox1.RowSource = "Hoja2!A2:A" & filalibre
    'oculto nuevamente el botón de nvo registro
    TextBox1.Visible = False
End If
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3 = ""
ComboBox1.Value = ""
ComboBox1.SetFocus
End Sub
Private Sub cmdCancelar_Click()
control = 0
TextBox1 = ""
TextBox1.Visible = False
TextBox2 = ""
TextBox3 = ""
ComboBox1.Value = ""
ComboBox1.SetFocus
End Sub
Private Sub cmdEliminar_Click()
If ubica = "" Then Exit Sub
ind = 1
Sheets("Hoja2").Range(ubica).EntireRow.Delete
TextBox2.Value = ""
TextBox3 = ""
    'actualizo rango del combobox
    ComboBox1.RowSource = "Hoja2!A2:A" & filalibre
ComboBox1.Value = ""
control = 0
ComboBox1.SetFocus
End Sub
Private Sub cmdAnterior_Click()
'no podrá mostrar por encima de fila 2
If ubica = "" Then Exit Sub
If Range(ubica).Row = 2 Then Exit Sub
ComboBox1.Value = Sheets("Hoja2").Range(ubica).Offset(-1, 0).Value
End Sub
Private Sub cmdSiguiente_Click()
If ubica = "" Then Exit Sub
If Range(ubica).Row = filalibre Then Exit Sub
ComboBox1.Value = Sheets("Hoja2").Range(ubica).Offset(1, 0).Value
End Sub
Private Sub cmdPrimero_Click()
If ubica = "" Then Exit Sub
ComboBox1.Value = Sheets("Hoja2").Range("A2").Value
End Sub
Private Sub cmdUltimo_Click()
'ubico cuál es la primer fila libre
If ubica = "" Then Exit Sub
filalibre = Sheets("Hoja2").Range("A65500").End(xlUp).Row + 1
ComboBox1.Value = Sheets("Hoja2").Cells(filalibre - 1, 1).Value
End Sub
Private Sub ComboBox1_Click()
If ind = 1 Then
    ind = 0
    Exit Sub
End If
dato = ComboBox1.Value
rango = "A2:A10"
Set midato = Sheets("Hoja2").Range(rango).Find(dato, LookIn:=xlValues, LookAt:=xlWhole)
If Not (midato) Is Nothing Then
    ubica = midato.Address(False, False)
    TextBox2.Value = Sheets("Hoja2").Range(ubica).Offset(0, 1).Value
    TextBox3.Value = Sheets("Hoja2"). Range(ubica).Offset(0, 2).Value
    'completar con otros controles
    'indico que se encontró el registro
    control = 1
Else
    MsgBox "No se encuentra el dato buscado. Para crear nuevo registro presiona el botón que se encuentra debajo"
End If
Set midato = Nothing
End Sub
Private Sub CommandButton1_Click()
'NVO REGISTRO
'muestro el textbox para codigo
TextBox1.Visible = True
TextBox1.SetFocus
End Sub
Private Sub CommandButton2_Click()
Application.Visible = True
ActiveWorkbook.Sheets("Hoja1").Activate
Unload Me
End Sub
Private Sub UserForm_Initialize()
'establezco la primer fila libre para agregar registros
filalibre = Sheets("Hoja2").Range("A65500").End(xlUp).Row
ComboBox1.RowSource = "Hoja2!A2:A" & filalibre
TextBox1.Visible = False
End Sub
de verdad si me pudieras ayudar te agradeceria muuuucho =)
Respuesta
1
Creo que el problema es que siempre usas el mismo nombre para crear las hojas. Debes usar una variable que se vaya incrementando para cada cliente. Sugiero que le pongas un numero correlativo a cada hoja, por ejemplo:
Sub NuevaPagina()
 Dim NumeroHojas As Integer
 Dim NombreHoja As String
 'calculo el nº de hojas actuales
 NumeroHojas = ActiveWorkbook.Worksheets.Count + 1
 'asigno un nombre a la nueva hoja
 NombreHoja = "Cliente" & NumeroHojas
 ActiveWorkbook.Worksheets.Add.Name = NombreHoja
End Sub
Así, en lugar de:
TextBox2.Value = Sheets("Hoja2").Range(ubica).Offset(0, 1).Value
haces:
dim codigo as string
codigo= NuevaPagina()
TextBox2.Value = Sheets(codigo).Range(ubica).Offset(0, 1).Value

2 respuestas más de otros expertos

Respuesta
1
Osea vos quieres que cada vez que se ingreses un cliente que no esta en una lista, ¿qué lo ingrese en una nueva hoja?
Me podrías mandar la planilla a [email protected] así la vbeo
Bueno básicamente tengo un registro con ciertos datos de clientes, pero quiero que al añadir un nuevo cliente en vez de todo caer en la misma hoja de calculo, aparezcan en una nueva hoja de calculo con los datos respectivos.
Ya te he mandado la planilla
Avisame cualquier duda
Ya la vi, me gusto pero hay ciertas diferencias que presenta al usarlo =/ gracias
Te he enviado la planilla con la solución de los items en 0 chequéala y dime si algo falla
Ya lo estoy descargando en cuanto lo revic te aviso
Te había mandado uno viejo prueba con el que te mande recientemente que debería funcionar, te pido disculpas
Gracias hermano, ya lo revise solo note dos cositas allí que no tenían una fallita no de gran cosa =)
Quería saber si la planilla te resulto optima, mira en cuanto a lo que me planteastes de las números que aparecen, podrías pintarlos en blanco o podríamos ubiacarlos más lejos, pero me tendrías que informar así lo corrijo.
Si la planilla la encuentras bien así como esta te pedirá que cierres la pregunta así puedo seguir contestando más dudas
Si me gustaría arreglar ese detalle, ya te respondí por correo de todos modos =)
Me encanta la planilla, de verdad que si, mil gracias por toda la yuda que me has dado,
Respuesta
1
Que tal perdón por la demora en la respuesta he estado un poco ocupado, no entendí muy bien tu pregunta debido a que donde estas trabajando originalmente en la hoja 1 o en la hoja 2 puesto si estas en la hoja 1 no le veo problema a tu código pero si estas trabando en la hoja 2 lo único que debes hacer es cambiar el numero de hoja de 2 a 3 en la parte en la que ingresas el nuevo cliente o si aunque trabajes en la hoja 1 no funciona lo que podrías hacer es antes de enviar los datos activar la hoja donde los vas a colocar
Sheets("Hoja 2"). Activate
... realizas los cambios
Sheets("Hoja 1"). Activate
Espero te sea de ayuda y si no es así avisame y pues tratare de darte otra opción solo redactame mejor la pregunta pues no la entendí muy bien
Gracias por tu preocupación y por haber respondido, pero ya soluciones gracias a otro experto el problema, pero de igual manera reitero mi gratitud =)
Por cierto no era eso lo que necesitaba, pero gracias igual je je

Añade tu respuesta

Haz clic para o