Listbox: error 380 no se puede escribir en la propiedad rowsource

Consulta:

Tengo un formulario donde tiene un combobox y un listbox.

En el combobox se muestran las hojas que tiene el libro y son los meses del año.

Quiero si se puede hacer que cuando en el combobox se seleccione un mes, me muestre los datos que están almacenados en el rango de celdas "az9:bb20" ya que en todas las hojas es el mismo rango pero con información diferente debido a que cuando se crea una planilla nueva se copia tal cual y se agrega una hoja con el mes siguiente.

Los datos ahí almacenados es lo del recibo de sueldo por ende en cada mes es un sueldo diferente.

Espero respuestas. Desde ya muchas gracias.

Aclaro que esto es en vba para microsoft excel y no en el programa en si de visual basic

2 Respuestas

Respuesta
2

Te anexo la macro para el evento change de tu combo

Los nombres almacenados en el combo deberán ser exactamente iguales al nombre de las hojas, por ejemplo, si almacenaste en el combo "enero", "febrero", etc. Deberás tener una hoja con el nombre de "enero", otra con el nombre de "febrero", etc.

Private Sub ComboBox1_Change()
'Por.Dante Amor
    ListBox1.RowSource = ""
    If ComboBox1.ListIndex = -1 Or ComboBox1 = "" Then Exit Sub
    '
    hoja = ""
    For Each h In Sheets
        If LCase(h.Name) = LCase(ComboBox1.Value) Then
            hoja = h.Name
            Exit For
        End If
    Next
    If hoja = "" Then
        MsgBox "No existe la hoja : " & ComboBox1.Value
        Exit Sub
    End If
    ListBox1.RowSource = hoja & "!AZ9:BB20"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola de nuevo. Acabo de probar los códigos y solo funciona el siguiente código pero con algunos errores

Private Sub ComboBox1_Change()
fecha = UCase(ComboBox1.Value)
Set datos = Range("az9").CurrentRegion
Sheets(fecha).Select
ListBox1.RowSource = "=" & datos.Address
End Sub
Private Sub UserForm_Initialize()
Set datos = Range("az9").CurrentRegion
For Each mes In Worksheets
    nmes = mes.Name
    With ComboBox1
        .AddItem nmes: .ListIndex = 0
    End With
Next mes
Sheets(ComboBox1.Value).Select
With ListBox1
    .ColumnCount = datos.Rows.Count
    .RowSource = "=" & datos.Address
End With
End Sub

.el error que tira es que al seleccionar un mes distinto al actual me muestra solamente una celda y cuando selecciono el mes actual me muestra todos los datos.

Y en este código de abajo me salta el error de que no se puede modificar el rowsources

Private Sub ComboBox1_Change()
'Por.Dante Amor
    ListBox1.RowSource = ""
    If ComboBox1.ListIndex = -1 Or ComboBox1 = "" Then Exit Sub
    '
    hoja = ""
    For Each h In Sheets
        If LCase(h.Name) = LCase(ComboBox1.Value) Then
            hoja = h.Name
            Exit For
        End If
    Next
    If hoja = "" Then
        MsgBox "No existe la hoja : " & ComboBox1.Value
        Exit Sub
    End If
    ListBox1.RowSource = hoja & "!AZ9:BB20"
End Sub

El código que te envié no tiene fallas, pero tengo que revisar que más tienes en ese listbox.

Envíame tu archivo para ver qué más tienes en ese listbox.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “favio valdez

Te anexo el código

Private Sub ComboBox1_Change()
    Label4.Caption = ComboBox1.Value
    hoja = ""
    For Each h In Sheets
        If LCase(h.Name) = LCase(ComboBox1.Value) Then
            hoja = h.Name
            Exit For
        End If
    Next
    If hoja = "" Then
        MsgBox "No existe la hoja : " & ComboBox1.Value
        Exit Sub
    End If
    ListBox1.RowSource = "'" & hoja & "'!AZ9:BB20"
End Sub
'
Private Sub UserForm_Initialize()
    For i = 1 To Sheets.Count
        ComboBox1.AddItem (Sheets(i).Name)
    Next i
    Label4.Caption = Empty
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola Dante

Funciona perfecto ahora, l que no se es porque solamente en mi excel no me permite cambiiar esa propiedad de rowsources y me sale eso que te envíe por mail. Eso me intriga porque veo que los demás pueden hacerlo y en mi excel no.

Revisa los nombres de las hojas, tal vez alguna hoja tiene algo mal escrito

Respuesta
2

En VBA creas en el formulario un combobox y un listbox y añades el siguiente código y más abajo te muestro lo que el código hará

Private Sub ComboBox1_Change()
Set datos = Range("az9:bb20")
nmes = UCase(ComboBox1.Value)
ListBox1.Clear
With datos
    For i = 1 To .Rows.Count
        mes = UCase(MonthName(Month(.Cells(i, 1))))
        If mes = nmes Then
        fecha = .Cells(i, 1): empleado = .Cells(i, 2): monto = .Cells(i, 3)
        With ListBox1
            .AddItem fecha
            .List(ListBox1.ListCount - 1, 1) = empleado
            .List(ListBox1.ListCount - 1, 2) = monto
        End With
        End If
    Next i
End With
End Sub
Private Sub UserForm_Initialize()
Set datos = Range("az9:bb20")
datos.Select
With ComboBox1
    .List = Array("Enero", "Febrero", "Marzo", "Abril", "Mayo")
    .ListIndex = 0
End With
With ListBox1
    .ColumnCount = datos.Columns.Count
End With
End Sub

esta es el resultado, escoges el mes y la macro hace un filtrado, en el codigo puse unos cuantos meses, solo es cuestion de agregar el resto, el formulario y la macro toman los datos de la hoja donde te encuentres.

hola james te aclaro que los datos de los meses el combobox lo obtiene desde el nombre de cada hoja. cada hoja se llama enero 2017, febrero 2017,marzo 2017, etc. Los meses de cada hoja ya estan agregados al combo. Entonces lo que hace es que cuando seleccione el mes de septiembre ya selecciona la hoja esa y me tiene que mostrar los datos de ese mes, o sea, el recibo de sueldo de ese mes. Todo en un listbox.

Bueno entonces trata con la siguiente macro

esta es la macro

Private Sub ComboBox1_Change()
fecha = UCase(ComboBox1.Value)
Set datos = Range("az9").CurrentRegion
Sheets(fecha).Select
ListBox1.RowSource = "=" & datos.Address
End Sub
Private Sub UserForm_Initialize()
Set datos = Range("az9").CurrentRegion
For Each mes In Worksheets
    nmes = mes.Name
    With ComboBox1
        .AddItem nmes: .ListIndex = 0
    End With
Next mes
Sheets(ComboBox1.Value).Select
With ListBox1
    .ColumnCount = datos.Rows.Count
    .RowSource = "=" & datos.Address
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas