Es más efectivo usar un combobox en lugar de un textbox así no habría errores que den como resultado un mensaje como "esta factura no se encuentra" siguiendo con tu pantalla este es el resultado
La tabla de las boletas tiene que tener esta estructura para que funcione la macro sin problemas
y este es el codigo
Option Base 1
Private Sub CommandButton1_Click()
LLENO = TextBox1.Text <> Empty
If LLENO Then BUSCA_FACTURA
End Sub
Private Sub TextBox1_AfterUpdate()
BUSCA_FACTURA
End Sub
Private Sub UserForm_Initialize()
Dim X As WorksheetFunction
Set X = WorksheetFunction
Set H1 = Worksheets("FACTURAS")
Set H2 = Worksheets("BOLETAS")
Set FACTURAS = H1.Range("A1").CurrentRegion
Set BOLETAS = H2.Range("A1").CurrentRegion
With UserForm2
.Move 150, 12
.Caption = "BUSCADOR DE BOLETAS"
End With
With FACTURAS
.Sort KEY1:=H1.Range(.Columns(1).Address), ORDER1:=xlAscending, _
KEY2:=H1.Range(.Columns(3).Address), ORDER1:=xlAscending, _
Header:=xlYes
Set FACTURAS = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
.Name = "FACTURAS"
End With
With BOLETAS
.Sort KEY1:=H2.Range(.Columns(1).Address), ORDER1:=xlAscending, _
Header:=xlYes
.Name = "BOLETAS"
End With
Set FACTURAS = Nothing: Set BOLETAS = Nothing
End Sub
Sub BUSCA_FACTURA()
Dim X As WorksheetFunction
Set X = WorksheetFunction
Set FACTURAS = Range("FACTURAS")
Set BOLETAS = Range("BOLETAS")
FACTURA = Val(TextBox1.Text)
LLENO = FACTURA <> Empty
If LLENO Then
With FACTURAS
CUENTA = X.CountIf(.Columns(1), FACTURA)
On Error Resume Next
FILA = X.Match(FACTURA, .Columns(1), 0)
XERR = Err.Number > 0
If XERR Then
MsgBox ("NO EXISTE ESA FACTURA"), vbCritical, "AVISO EXCEL"
GoTo SAL
End If
On Error GoTo 0
Set NFACTURA = .Rows(FILA).Resize(CUENTA)
TextBox2.Text = Format(X.Sum(NFACTURA.Columns(4)), "$ 0,0.00")
With NFACTURA
R = .Columns.Count: C = .Columns.Count - 1
Set NFACTURA = .Columns(2).Resize(CUENTA, C + 1)
End With
matriz = NFACTURA
ReDim NUMEROS(CUENTA)
Y = 1: SUMA = 0
For i = 1 To CUENTA
BOLETA = matriz(i, 2)
matriz(i, 3) = Format(matriz(i, 3), "$ 0,0.00")
CUENTA2 = X.CountIf(BOLETAS.Columns(1), BOLETA)
VALIDA = CUENTA2 > 0
If VALIDA Then
FILA = X.Match(BOLETA, BOLETAS.Columns(1), 0)
matriz(i, 4) = "EXISTE"
VALIDA2 = Y = 1
If VALIDA2 Then
SUMA = BOLETAS.Cells(FILA, 3)
Else
SUMA = SUMA + BOLETAS.Cells(FILA, 3)
End If
Y = Y + 1
Else
matriz(i, 4) = "NO EXISTE"
End If
Next i
With ListBox1
.Clear
.ColumnCount = C + 1
.List = matriz
.ColumnWidths = "80;80;80;80"
End With
With TextBox3
.Text = Format(SUMA, "$ 0,0.00")
.Locked = True
End With
End With
End If
SAL:
Set FACTURAS = Nothing: Set BOLETAS = Nothing
Set NFACTURA = Nothing
TextBox1.SetFocus
End Sub