Saltar al contenido

Guardar de forman permanente variables


Recommended Posts

publicado

Hola a todos;

-En en video del siguiente enlace os muestro como he conseguido guardar de forma permanente el valor de nuestras variables.

Para ello lo que hago al momento de pulsar el botón es limpiar previamente el módulo e insertar los nuevos datos y por medio de una función los recupero.

Enlace video:

Variables permanentes

image.thumb.gif.23f0bb240b48383693444a28535af461.gif

MVariablePermanente(Multiples).xlsmFetching info...

publicado

Me parece que te complicas la vida, la forma más habitual de guardar datos es en una hoja oculta, pero también se puede hacer con nombres.

Con hoja oculta sería algo así:

  • Columna A-Nombre formulario/Variable
  • Columna B-Nombre control
  • Columna C-Valor 1
  • Columna D-Valor 2
  • Columna E-Valor 3
  • ......

Te dejo un ejemplo con nombres.

 

Variables fijas.xlsmFetching info...

publicado

Hola Antoni, he visto tú propuesta y me ha gustado mucho.

Sabía de los dos métodos y de este segundo lo sabía hacer pero manualmente y no desde un procedimiento.

En cuanto al primero, no me gusta mucho dejar anotaciones en las hojas ya que por error alguien las puede borrar y después ya no funciona la macro.

He revisado tú propuesta la cual está genial y veo que no deja guardar "texto" solo números, ¿se puede reconfigurar para que admita también "texto"?.

Un abrazo Antoni y excelente trabajo.

P.D. Esta vez te pondré un 9, te fallo lo del texto?

 

Ya lo he resuelto y un punto para mi, inclusive probé con un combo.?

image.png.225ecfdc6ea2acbe8e4847b5121409de.png

publicado
En cuanto al primero, no me gusta mucho dejar anotaciones en las hojas ya que por error alguien las puede borrar y después ya no funciona la macro.

Si proteges la hoja y la ocultas como VeryHidden no tendrás problemas.

publicado
  En 16/8/2023 at 7:49 , Antoni dijo:
En cuanto al primero, no me gusta mucho dejar anotaciones en las hojas ya que por error alguien las puede borrar y después ya no funciona la macro.

Si proteges la hoja y la ocultas como VeryHidden no tendrás problemas.

Expand  

Ya lo sé, pero me gusta más esta segunda opción ?

publicado

hola, a ambos !

asumo que ya saben que tambien los nombres se pueden ocultar (al crearlos desde vba), p.ej. para el libro activo:

names.add "nombre", "=aqui la formula o referencia", 0 ' (o false) '
publicado
  En 15/2/2023 at 13:43 , Benito Bartolomé dijo:

Hola a todos;

En el siguiente enlace os muestro otra forma de cargar datos en un ComboBox.

Cargar ComboBox - video

Saludos a todos.

Expand  

 

  En 17/8/2023 at 3:52 , Héctor Miguel dijo:

hola, a ambos !

asumo que ya saben que tambien los nombres se pueden ocultar (al crearlos desde vba), p.ej. para el libro activo:

names.add "nombre", "=aqui la formula o referencia", 0 ' (o false) '
Expand  

Hola Héctor, pues sí ya lo había visto en un video de Sergio Alejandro donde comenta que la idea era suya, aún así agradezco el detalle. Está bien esta opción para guardar datos que no queramos mostrar.

Como lo decía a Antoni si sabía hacerlo siguiendo dicho video pero no me imaginaba que se pudiese hacer mediante una macro, la verdad que es bastante simple y muy muy útil.

Lo que yo sugería es un pelín mas largo pero a efectos el resultado es el mismo.

Pues ya quedan dos opciones para almacenar los valores de las variables de forma permanente.

Gracias a ambos por vuestros aportes y sabiduría.

Saludos

publicado
  En 17/8/2023 at 8:04 , Antoni dijo:

Hola a todos:

En el archivo que subí, los Name  ya se crean ocultos (,Visible:=False).

Saludos

 

Expand  

Sí, ya lo vi en el primer post y me llamó la atención.

Como siempre vas un paso por delante ?.

Bueno "uno" me quedé corto ?

publicado
  En 15/8/2023 at 17:25 , Antoni dijo:

Me parece que te complicas la vida, la forma más habitual de guardar datos es en una hoja oculta, pero también se puede hacer con nombres.

Con hoja oculta sería algo así:

  • Columna A-Nombre formulario/Variable
  • Columna B-Nombre control
  • Columna C-Valor 1
  • Columna D-Valor 2
  • Columna E-Valor 3
  • ......

Te dejo un ejemplo con nombres.

 

Variables fijas.xlsm 23.19 kB · 4 descargas

Expand  

Hola @Antoni disculpa que te moleste nuevamente, no tengo la tarde acertada?.

Estoy tratando de implementar tu propuesta usando OptionButtons  para seleccionar el "Genero" si es "masculino" o "femenino" y no soy capaz, ya he probado de varias formas y no hay manera. 

He probado usando "texto" y "número" y no me sale. Incluso e duplicado "Genero" por si acaso.

Seguramente es una tontería pero no lo veo, ni con gafas?

Saludos.

 

Variables fijas.xlsmFetching info...

publicado

Así funciona:

'------------------------------------------------------------------
Private Sub Guardar_Click()
   With ActiveWorkbook.Names
      .Add Name:="ALBARÁN", RefersTo:=TextBox1, Visible:=False
      .Add Name:="PEDIDO", RefersTo:=TextBox2, Visible:=False
      .Add Name:="FACTURA", RefersTo:=TextBox3, Visible:=False
      .Add Name:="ASIENTO", RefersTo:=TextBox4, Visible:=False
      .Add Name:="Genero1", RefersTo:=OptionButton1, Visible:=False
      .Add Name:="Genero2", RefersTo:=OptionButton2, Visible:=False
   End With
   Unload Me
End Sub
'-------------------------------------------------------------------
Private Sub UserForm_Initialize(): On Error Resume Next
    TextBox1 = [ALBARÁN]
    TextBox2 = [PEDIDO]
    TextBox3 = [FACTURA]
    TextBox4 = [ASIENTO]
    OptionButton1.Value = [Genero1]
    OptionButton2.Value = [Genero2]
End Sub

 

publicado
  En 22/8/2023 at 16:20 , Antoni dijo:

Así funciona:

'------------------------------------------------------------------
Private Sub Guardar_Click()
   With ActiveWorkbook.Names
      .Add Name:="ALBARÁN", RefersTo:=TextBox1, Visible:=False
      .Add Name:="PEDIDO", RefersTo:=TextBox2, Visible:=False
      .Add Name:="FACTURA", RefersTo:=TextBox3, Visible:=False
      .Add Name:="ASIENTO", RefersTo:=TextBox4, Visible:=False
      .Add Name:="Genero1", RefersTo:=OptionButton1, Visible:=False
      .Add Name:="Genero2", RefersTo:=OptionButton2, Visible:=False
   End With
   Unload Me
End Sub
'-------------------------------------------------------------------
Private Sub UserForm_Initialize(): On Error Resume Next
    TextBox1 = [ALBARÁN]
    TextBox2 = [PEDIDO]
    TextBox3 = [FACTURA]
    TextBox4 = [ASIENTO]
    OptionButton1.Value = [Genero1]
    OptionButton2.Value = [Genero2]
End Sub

 

Expand  

Gracias @Antonilo probaré.

Juraría que ya lo había probado, sin el bloque With claro.

Saludos ?

  • 7 months later...
publicado
  En 15/8/2023 at 17:25 , Antoni dijo:

Me parece que te complicas la vida, la forma más habitual de guardar datos es en una hoja oculta, pero también se puede hacer con nombres.

Con hoja oculta sería algo así:

  • Columna A-Nombre formulario/Variable
  • Columna B-Nombre control
  • Columna C-Valor 1
  • Columna D-Valor 2
  • Columna E-Valor 3
  • ......

Te dejo un ejemplo con nombres.

 

Variables fijas.xlsm 23.19 kB · 21 descargas

Expand  

Hola Antoni, estoy teniendo problemas con esto:

image.thumb.png.2bf7bd16d73277de78efe6cf5f241152.png

Cuanto intento guardar datos y estos llevan "=" lo interpreta como fórmula y me genera error, tienes alguna idea que me permita introducir cualquier tipo de datos?

Saludos

Variables fijas (1).xlsmFetching info...

publicado

Con este procedimiento:

If Not TextBox5.Text = "" Then
    ActiveWorkbook.Names.Add Name:="Html", RefersTo:="'" & TextBox5.Text & "'", Visible:=False
End If

funciona siempre y cuando no nos pasemos de un determinado numero de caracteres.😔

Y así no me sirve.

Si a alguien se le ocurre algo ¿?

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.