Como eliminar registro de un combobox con una condición en excel VBA
Estoy haciendo un formulario con excel en VBA; dentro de un formulario de recibos, tengo un Combobox el cual me carga todas las facturas de un determinado cliente, al yo guardar, las facturas que he registrado allí, se deben cancelar, (eso ya lo programe), pero necesito que cuando vuelva a cargar este formulario no me vuelvan a aparecen las facturas que ya cancele anteriormente. Es decir, que si tenia las facturas 1525, 1527 y 1528, y cancelé la 1525 y 1528, cuando vuelva a ingresar donde el mismo cliente, solo me cargue la factura 1527.
1 Respuesta

No necesitas eliminarlo solo filtrar los cancelados al cargar la macro cehca este ejemplo, tengo 4 facturas canceladas y estas no serán cargadas en el combobox, prueba la macro copiandola en el modulo del formulario y esta es la macro
Private Sub UserForm_Initialize() Set datos = Range("a1").CurrentRegion With datos filas = .Rows.Count: columnas = .Columns.Count .Sort key1:=Range(.Columns(columnas).Address), order1:=xlAscending, Header:=xlYes cuenta = WorksheetFunction.CountIf(.Columns(columnas), "cancelada") fila = WorksheetFunction.Match("cancelada", .Columns(columnas), 0) Set facturavig = .Rows(fila + cuenta).Resize(filas - cuenta - 1) End With With facturavig .Sort key1:=Range(.Columns(1).Address), order1:=xlAscending, Header:=xlNo ComboBox1.RowSource = facturavig.Address End With Set facturavig = Nothing: Set datos = Nothing End Sub

Buenos días señor Bond, te agradezco por la ayuda que me has brindado, te informo que coloque el código en el evento Initialize, reemplace datos como el rango, el nombre del combobox, cree las variables, pero me saca muchos errores en los with, entonces no se cual sera el error que lo genera. No se si definí mal las variables, para que me puedas decir que puedo hacer.
muchas gracias...

Cuando dices que te saca muchos errores hace falta ser más especifico ¿qué errores te marca? Y la otra como no pusiste una imagen de como esta estructurada tu información la macro la hice con información inventada así que por fuerza te iba a dar errores era solo un ejemplo para que adaptaras la macro a tu información. Así que por favor sube ambas cosas que mencione para ver que genera el error.

Hola de nuevo Sr Bond, la verdad si, tienes toda la razón, disculpame por no haber sido mas especifico en lo que quiero, aunque en algun momento pensé colocar un pantallazo para mostrarte mejor.... pero ya lo tengo...
Como puedes ver, tengo un combobox que se llama, cmbcliente que tiene el nombre de cada cliente, y cada vez que elijo uno, se me cargan las facturas del cliente seleccionado.
En este formulario hay un botón guardar, que me coloca a las facturas registradas como "CANCELADA", pero como te lo expuse antes, necesito que cuando vuelva a abrir el formulario me cargue las facturas que no haya cancelado; vos me dijiste que las filtrara, pero aun no se como hacerlo.
No se si con este pantallazo hay forma de que me puedas decir como programo para filtrar solo las no canceladas.
Te agradezco la colaboración para este problemita que tengo...
MUCHAS GRACIAS.

Falta un dato muy importante la pantalla de tu información, la requiero para saber de que columna se va a extraer el numero de la factura

Este es un ejemplo de como lo hace la macro, en la pantalla puedes ver cuantas canceladas tiene Aeromexico y como no se cargan en el combobox2 al seleccionar el cliente.
Private Sub ComboBox1_Change() Set clientes = Range("CLIENTES") CLIENTE = ComboBox1.Value With clientes CUENTA = WorksheetFunction.CountIf(.Columns(1), CLIENTE) FILA = WorksheetFunction.Match(CLIENTE, .Columns(1), 0) Set FACTURA = .Rows(FILA).Resize(CUENTA) FACTURA.Select ComboBox2.Clear For I = 1 To FACTURA.Rows.Count NFACTURA = FACTURA.Cells(I, 3) If WorksheetFunction.IsText(NFACTURA) = False Then ComboBox2.AddItem NFACTURA End If Next I End With Set clientes = Nothing: Set facturas = Nothing End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() Dim UNICOS As New Collection Set datos = Range("B1").CurrentRegion With datos F = .Rows.Count .Sort KEY1:=Range(.Columns(1).Address), ORDER1:=xlAscending, Header:=xlYes For I = 2 To F CLIENTE = .Cells(I, 1) On Error Resume Next UNICOS.Add CLIENTE, CStr(CLIENTE) If Err.Number = 0 Then ComboBox1.AddItem CLIENTE On Error GoTo 0 Next I ComboBox1.ListIndex = 0 .Name = "CLIENTES" End With Set datos = Nothing End Sub

Buenas tardes Sr. Bond.
Que pena la molestia pero me sigue sacando errores, reemplace datos como el nombre del combobox, cree las variables, pero me saca errores en los with, por ejemplo, este mensaje me sale cuando voy a cargar el formulario
yo, definí las variables tanto en el evento Initiliaze como en el combobox1 que es donde esta el cliente, te muestro las variables para saber si están mal definidas o que..
Y estas son las variables en el evento change del combobox del cliente.
Me gustaría que las mires bien por favor y me digas que otra cosa tengo mal en la programación, para poder organizar, ya que debo terminar pronto este formulario.
Mil gracias por tu ayuda...

Tienes mal definidas las variables los que son numéricos o de texto los definiste como range o worksheets por eso te error, tienes un doble cargado de información en los clientes ya te marque que línea debes quitar, es tu decisión hacerlo, solo compara la macro que te envío con la que tu modificaste y te darás cuenta de donde están los errores
Private Sub CMBCLIENTE_Change() Dim CLIENTES, FACTURA As Range Dim CUENTA, NFACTURA, FILA As Integer Dim CLIENTE As String Dim FACTURAS As String Dim I As Integer Set CLIENTES = Range("CLIENTES") CLIENTE = CMBCLIENTE.Value With CLIENTES CUENTA = WorksheetFunction.CountIf(.Columns(1), CLIENTE) FILA = WorksheetFunction.Match(CLIENTE, .Columns(1), 0) Set FACTURA = .Rows(FILA).Resize(CUENTA) FACTURA.Select TXTFACT1.Clear For I = 1 To FACTURA.Rows.Count NFACTURA = FACTURA.Cells(I, 3) If WorksheetFunction.IsText(NFACTURA) = False Then TXTFACT1.AddItem NFACTURA End If Next I End With Set CLIENTES = Nothing: Set FACTURA = Nothing End Sub Private Sub UserForm_Initialize() 'CMBCLIENTE.RowSource = "NAME1" 'ESTA LINEA NO SE OCUPA Sheets("FACTURAS").Select Dim UNICOS As New Collection Dim DATOS As Range Dim F As Integer Dim I As Integer Dim CLIENTE As String Set DATOS = Range("B1").CurrentRegion With DATOS F = .Rows.Count .Sort KEY1:=Range(.Columns(1).Address), ORDER1:=xlAscending, Header:=xlYes For I = 2 To F CLIENTE = .Cells(I, 1) On Error Resume Next UNICOS.Add CLIENTE, CStr(CLIENTE) If Err.Number = 0 Then CMBCLIENTE.AddItem CLIENTE On Error GoTo 0 Next I CMBCLIENTE.ListIndex = 0 .Name = "CLIENTES" End With Set DATOS = Nothing End Sub

Muchas gracias Mr. Bond por tu ayuda, te comento que cuando cambie la programación en el evento initialize y ejecute el formulario me cargó todos los clientes en orden alfabético. Pero cuando organice la información en el evento change, me sale el siguiente error.
Nuevamente te pido el favor si no es mucha molestia y me indiques como corregir este error.
Mil gracias de nuevo por tu gran ayuda...
Saludos...

Eso pasa cuando hay dato que no existe puedes poner
on error resume next
fila=worksheetfunction.....
on error goto 0
o bien borrar de initalize
ComboBox1.ListIndex = 0
Lo que no entiendo es porque a mi cuando corro de nuevo la macro no me marca ningún error, ¿en la columna A tienes datos?, porque eso también afecta.
- Compartir respuesta
