Saltar al contenido

RowSource dinámico a la derecha (al insertar columnas)


Recommended Posts

publicado

Buenas noches.

Maestros quisiera saber si se puede volver dinámico el rango a la derecha la propiedad RowSource de un ListBox. Es que tengo una base de datos a la cual de vez en cuando se le agregan columnas nuevas y quisiera se ampliara la selección a la derecha como lo hace hacia abajo. Ejemplo 

ListBox1.RowSource = "A4:End(xlToRight)" & Range("A3").End(xlDown).Row

Algo así, no se si se podrá.

publicado

Hola a ambos!

En 3/3/2021 at 17:07 , Jezreel dijo:

Ejemplo 


ListBox1.RowSource = "A4:End(xlToRight)" & Range("A3").End(xlDown).Row

Algo así, no se si se podrá.

Mientras subes una pequeña muestra y asumiendo que lo que deseas es obtener el rango actual

Puedes probar así

ListBox1.RowSource = Range("A4").CurrentRegion.Address(, , , 1)

 

Saludos!

publicado
Hace 25 minutos , Gerson Pineda dijo:

ListBox1.RowSource = Range("A4").CurrentRegion.Address(, , , 1)

Amigo muchisimas  gracias por tu pronta respuesta. Funciona excelente, pero hay un detalle! que al usar esa propiedad ya no me reconoce el ColumnHeads y de verdad que lo necesito porque precisamente al ir incluyendo columnas con su respectiva cabecera quisiera evitar el uso de Labels para las cabeceras del Listbox. Hay alguna manera de solucionar eso?

image.thumb.png.08f9598325b77e305ab88b839a898914.png

 Por cierto lo de Azufre es solo una prueba jajajaja

publicado

Solo es mover una tecla, mira

Range("A1").CurrentRegion.Offset(1).Address(, , , 1)

 

Hace 1 hora, Jezreel dijo:

 Por cierto lo de Azufre es solo una prueba jajajaja

Pues ten cuidado :lol:

 

Saludos!

publicado
Hace 41 minutos , Gerson Pineda dijo:

Range("A1").CurrentRegion.Offset(1).Address(, , , 1)

Que grande Maestro... Funciona perfecto. Muchas Gracias.

Una ultima cosa por favor: resulta que en mi código tengo la necesidad de modificar un dato en 3 hojas. El dato lo tomo al seleccionar un item del ListBox, y al ejecutar el evento "Click" me modifica bien el dato solo en la Hoja "Rubros", pero en las hojas "Ayuda1eraVez" y "AyudaAdicional" no se modifica, creo que porque se desencadena el evento Click y Change del ListBox. Se que hay que interrumpir esos eventos para que se ejecute bien la macro y pueda modificar el dato en las otras 2 hojas, pero de verdad no se como interrumpirlo y volver a retomar el ListBox.RowSource = MiRango.Address. Dejo acá el código:

 

Sub BotonInactivar_Click()
Dim Fila As Integer, Fila2 As Integer, Fila3 As Integer, Final As Integer, Final2 As Integer, Final3 As Integer
On Error Resume Next
If ListBox1.ListIndex = -1 Then
Set MiRango = Empty
MsgBox "Debe seleccionar un Rubro a Inactivar", vbExclamation
    Exit Sub
    End If
Sheets("Rubros").Select
Final = Hoja3.Cells(Rows.Count, "B").End(xlUp).Row
    For Fila = 2 To Final
    If TextBox8.Text = Hoja3.Cells(Fila, 2) Then
        Hoja3.Cells(Fila, 1) = "Inactivo"
        Exit For
    Else
    End If
    Next
Sheets("AyudaAdicional").Select
Final3 = Hoja11.Cells(Rows.Count, "B").End(xlUp).Row
    For Fila3 = 2 To Final3
    If TextBox8.Text = Hoja11.Cells(Fila, 2) Then
        Hoja11.Cells(Fila, 1) = "Inactivo"
    Exit For
    Else
    End If
    Next
Call ElimInacAA
Sheets("Ayuda1eraVez").Select
        Final2 = Hoja10.Cells(Rows.Count, "B").End(xlUp).Row
        For Fila2 = 2 To Final2
        If TextBox8.Text = Hoja10.Cells(Fila, 2) Then
        Hoja10.Cells(Fila, 1) = "Inactivo"
    Exit For
    Else
    End If
    Next
Call ElimInacA1
End Sub

 

publicado

Partiendo de que modificamos ARROZ con los datos más abajo visibles, muestra como debería quedar en cada una de las hojas.

GIF.gif

publicado
Hace 2 minutos , JSDJSD dijo:

Partiendo de que modificamos ARROZ con los datos más abajo visibles, muestra como debería quedar en cada una de las hojas.

Bueno si se modifica algun dato de los Textbox deberian pasar a cada una de las 3 hojas. Pero en realidad lo que mas preocupa es que al darle al boton INACTIVAR RUBRO se suponde que debe colocar la palabra "inactivo" en la columna A de la hoja Rubros, y hacer lo mismo en las hojas Ayuda1eravez y AyudaAdicional. Pero en estas dos ultimas no lo hace.

publicado
Hace 1 minuto , JSDJSD dijo:

A vale, lo único que hay que hacer es que te ponga inactivo en las tres hojas verdad?

Correecto, y si hay algun cambio en los textbox tambin ese cambio debe ir en las 3 hojas

publicado
Hace 3 horas, JSDJSD dijo:

Prueba y comenta a ver si es lo que pretendes..

Oye Maestro muy bueno. Es decir que con el evento doble click en el listbox se solucionaba eso? Fue el unico cambio que hiciste?

publicado
Hace 7 horas, Jezreel dijo:

Es decir que con el evento doble click en el listbox se solucionaba eso? Fue el unico cambio que hiciste?

Lo del evento doble click es para no tener que cambiar la estructura de tu código, también cambie algo que casi siempre NOS pasa cuando hacemos copia y pega como te muestro a continuación.

GIF.gif

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.