Macro que guarda datos fuera de la planilla

En una macro que usted me ayudo a corregir, existe una parte que al pulsar un botón guarda los datos que fueron ingresados a una serie de txtBox, la rutina funciona perfecto ya que guarda la información en el orden correcto, el único problema es que lo hace fuera del recuadro de la planilla de Excel.

La consulta es, se puede corregir esto o debo eliminar el recuadro que le da forma a la planilla.

Desde ya muchas gracias.

Private Sub cmdbguardar_Click()
    'mensaje cuando no se eligio hoja
    If ComboBox1.ListIndex = -1 Or ComboBox1.Value = "" Then
        MsgBox "Selecciona una hoja", vbExclamation
        Exit Sub
    End If
    'Pasamos el dato de la hoja, a una variable
    hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
    'seleccionamos esa hoja
    Sheets(hoja_elegida).Select
    'variable que almacena la ultima fila
    Dim ultimafila As Double
    ultimafila = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    Cells(ultimafila + 1, 2) = txtColumna1
    Cells(ultimafila + 1, 3) = txtColumna2
    Cells(ultimafila + 1, 4) = txtColumna3
    Cells(ultimafila + 1, 5) = txtColumna4
    Cells(ultimafila + 1, 6) = txtColumna5
    Cells(ultimafila + 1, 7) = txtColumna6
    Cells(ultimafila + 1, 8) = txtColumna7
    Cells(ultimafila + 1, 9) = txtColumna8
    Cells(ultimafila + 1, 10) = txtColumna9
    Cells(ultimafila + 1, 11) = txtColumna10
    Cells(ultimafila + 1, 12) = txtColumna11
    Cells(ultimafila + 1, 13) = txtColumna12
    Cells(ultimafila + 1, 14) = txtColumna13
    Cells(ultimafila + 1, 15) = txtColumna14
    Call ComboBox1_Click
    txtColumna1.Text = ""
    txtColumna2.Text = ""
    txtColumna3.Text = ""
    txtColumna4.Text = ""
    txtColumna5.Text = ""
    txtColumna6.Text = ""
    txtColumna7.Text = ""
    txtColumna8.Text = ""
    txtColumna9.Text = ""
    txtColumna10.Text = ""
    txtColumna11.Text = ""
    txtColumna12.Text = ""
    txtColumna13.Text = ""
    txtColumna14.Text = ""
End Sub

1 respuesta

Respuesta
1

Podemos actualizar los bordes

Cambia la macro por esta

Private Sub cmdbguardar_Click()
    'mensaje cuando no se eligio hoja
    If ComboBox1.ListIndex = -1 Or ComboBox1.Value = "" Then
        MsgBox "Selecciona una hoja", vbExclamation
        Exit Sub
    End If
    If txtColumna1.Value = "" Then
        MsgBox "El dato del txtcolumna1, es requerido"
        txtColumna1.SetFocus
        Exit Sub
    End If
    'Pasamos el dato de la hoja, a una variable
    hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
    'seleccionamos esa hoja
    Sheets(hoja_elegida).Select
    'variable que almacena la ultima fila
    Dim ultimafila As Double
    ultimafila = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    Cells(ultimafila + 1, 2) = txtColumna1
    Cells(ultimafila + 1, 3) = txtColumna2
    Cells(ultimafila + 1, 4) = txtColumna3
    Cells(ultimafila + 1, 5) = txtColumna4
    Cells(ultimafila + 1, 6) = txtColumna5
    Cells(ultimafila + 1, 7) = txtColumna6
    Cells(ultimafila + 1, 8) = txtColumna7
    Cells(ultimafila + 1, 9) = txtColumna8
    Cells(ultimafila + 1, 10) = txtColumna9
    Cells(ultimafila + 1, 11) = txtColumna10
    Cells(ultimafila + 1, 12) = txtColumna11
    Cells(ultimafila + 1, 13) = txtColumna12
    Cells(ultimafila + 1, 14) = txtColumna13
    Cells(ultimafila + 1, 15) = txtColumna14
    Call ComboBox1_Click
    txtColumna1.Text = ""
    txtColumna2.Text = ""
    txtColumna3.Text = ""
    txtColumna4.Text = ""
    txtColumna5.Text = ""
    txtColumna6.Text = ""
    txtColumna7.Text = ""
    txtColumna8.Text = ""
    txtColumna9.Text = ""
    txtColumna10.Text = ""
    txtColumna11.Text = ""
    txtColumna12.Text = ""
    txtColumna13.Text = ""
    txtColumna14.Text = ""
    '
    'Poner bordes
    Range("B" & ultimafila & ":O" & ultimafila).Borders(xlEdgeBottom).LineStyle = xlNone
    With Range("B" & ultimafila + 1 & ":O" & ultimafila + 1)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
    End With
End Sub

sal u dos

Hola Dante

Gracias por la pronta respuesta.

Consulta, por debajo de la información existente en la planilla, no debe tener bordes? o es indistinto.

Gracias

Puedes poner imágenes de lo que tienes, de cómo lo deja la macro y otra imagen de cómo lo quieres.

Hola Dante

Aquí están las dos capturas, una antes de utilizar la macro y otra después.

Las 5 ultimas columnas son las únicas que tienen una condición, la de moneda y dos decimales. Las demás solo el centrado.

Si necesita más información, no dude en solicitarla.

Gracias.

Entonces no entendí a qué te refieres con esto:

El único problema es que lo hace fuera del recuadro de la planilla


Si el problema es el formato, tienes que copiar el formato en moneda en toda la columna.

Luego en la macro hay que poner lo siguiente:

Private Sub cmdbguardar_Click()
    'mensaje cuando no se eligio hoja
    If ComboBox1.ListIndex = -1 Or ComboBox1.Value = "" Then
        MsgBox "Selecciona una hoja", vbExclamation
        Exit Sub
    End If
    If txtColumna1.Value = "" Then
        MsgBox "El dato del txtcolumna1, es requerido"
        txtColumna1.SetFocus
        Exit Sub
    End If
    'Pasamos el dato de la hoja, a una variable
    hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
    'seleccionamos esa hoja
    Sheets(hoja_elegida).Select
    'variable que almacena la ultima fila
    Dim ultimafila As Double
    ultimafila = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    Cells(ultimafila + 1, 2) = txtColumna1
    Cells(ultimafila + 1, 3) = txtColumna2
    Cells(ultimafila + 1, 4) = txtColumna3
    Cells(ultimafila + 1, 5) = txtColumna4
    Cells(ultimafila + 1, 6) = txtColumna5
    Cells(ultimafila + 1, 7) = txtColumna6
    Cells(ultimafila + 1, 8) = txtColumna7
    Cells(ultimafila + 1, 9) = txtColumna8
    Cells(ultimafila + 1, 10) = txtColumna9
    Cells(ultimafila + 1, 11) = cdlb(txtColumna10)
    Cells(ultimafila + 1, 12) = cdlb(txtColumna11)
    Cells(ultimafila + 1, 13) = cdlb(txtColumna12)
    Cells(ultimafila + 1, 14) = cdlb(txtColumna13)
    Cells(ultimafila + 1, 15) = cdlb(txtColumna14)
    Call ComboBox1_Click
    txtColumna1.Text = ""
    txtColumna2.Text = ""
    txtColumna3.Text = ""
    txtColumna4.Text = ""
    txtColumna5.Text = ""
    txtColumna6.Text = ""
    txtColumna7.Text = ""
    txtColumna8.Text = ""
    txtColumna9.Text = ""
    txtColumna10.Text = ""
    txtColumna11.Text = ""
    txtColumna12.Text = ""
    txtColumna13.Text = ""
    txtColumna14.Text = ""
    '
End Sub

Le agregué la función CDbl a los textbox que deben quedar en la celda como valor numérico, esos textbox deben tener un número obligatorio.

Hola Dante

Además de no respetar esas columnas, borra el borde superior de la fila donde guarda los datos, por eso preguntaba si se debían borrar tos los bordes originales.

Perdón Dante

Al probar la macro me dio este error.

No estoy entendiendo qué necesitas.

¿Quieres bordes en la hoja?

¿O quieres poner los números en la hoja?

Prueba llenando cada uno de los textbox

Los textbox que deben quedar en la celda como valor numérico, esos textbox deben tener un número obligatorio.

Hola Dante

La idea es pasar los valores que se ingresan en los txtbox a la planilla que en ese momento se esta viendo en el listbox, la planilla que esta involucrada ya tiene un formato realizado con bordes como se puede ver en las capturas anteriores, al realizar la primer prueba de la macro, note que guardaba los datos fuera de la forma realizada en la planilla, por debajo de la ultima fila dibujada con los bordes.

Cuando usted me mando la corrección, al probarla, guardaba los datos en el lugar que correspondía, dentro de la planilla y en la primer fila libre, pero borraba el borde superior de esa fila y no respetaba el formato de celda que es en moneda con dos decimales.

Cuando me mando la segunda corrección, al probarla ingresando datos, apareció este nuevo mensaje de error que se observa en la ultima captura enviada.

Como siempre le agradezco su colaboración, si necesita mas información, por favor no dude en solicitarla.

Eduardo

Cambia CDbl por Val

Para el formato, solamente copia el formato de la celda y replícalo en el resto de la columna

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas