Error al momento de seleccionar una línea en un listbox al querer eliminarla.

TodoExpertos, muy buenos días. Tengo un listbox que carga la información de una tabla. El inconveniente surge al momento de seleccionar la línea e intentar eliminarla. Surge el error 1004 en tiempo de ejecución. No se puede obtener la propiedad CurrentRegion de la clase Range.

Respuesta
1

Pon la macro aquí

Adriel, el botón para eliminar tiene la siguiente macro

'Eliminar el registro
Private Sub CommandButton4_Click()
Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "")
If Pregunta <> vbNo Then
    ActiveCell.EntireRow.Delete
End If
Call CommandButton5_Click
End Sub
Private Sub CommandButton5_Click()
 'Act.Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Temporal")
    '
    If Me.txtFiltro1.Value = "" Then Exit Sub
    If cmbEncabezado = "" Then Exit Sub
    '
    h2.Cells.Clear
    ListBox1.RowSource = ""
    h1.Rows(1).Copy h2.Rows(1)
    '
    j = cmbEncabezado.ListIndex + 1
    n = 2
    '
    For i = 2 To Range("a1").CurrentRegion.Rows.Count
        If LCase(Cells(i, j)) Like "*" & LCase(txtFiltro1) & "*" Then
            h1.Rows(i).Copy h2.Rows(n)
            n = n + 1
        End If
    Next i
    u = Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then
        MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
        Exit Sub
    End If
    ListBox1.RowSource = h2.Name & "!A2:Z" & u
End Sub

Y la siguiente instruccion es donde se detiene al borrar en "Set Rango = Range("A1").CurrentRegion " y es indicado en amarillo

'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
Range("a2").Activate
Cuenta = Me.ListBox1.ListCount
Set Rango = Range("A1").CurrentRegion 'marca de error al intentar borrar
For i = 0 To Cuenta - 1
    If Me.ListBox1.Selected(i) Then
        Valor = Me.ListBox1.List(i)
        Rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate
    End If
Next i
frmMasinformacion.Show 'activa con un click el formulario con mas información
    frmMasinformacion.TextBox1 = ListBox1.Column(0)
    frmMasinformacion.TextBox1 = ListBox1.Column(0)
    frmMasinformacion.TextBox2 = ListBox1.Column(1)
    frmMasinformacion.TextBox3 = ListBox1.Column(2)
    frmMasinformacion.TextBox4 = ListBox1.Column(3)
    frmMasinformacion.TextBox5 = ListBox1.Column(4)
    frmMasinformacion.TextBox6 = ListBox1.Column(5)
    frmMasinformacion.TextBox7 = ListBox1.Column(6)
    frmMasinformacion.TextBox8 = ListBox1.Column(7)
    frmMasinformacion.TextBox9 = ListBox1.Column(8)
    frmMasinformacion.TextBox10 = ListBox1.Column(9)
    frmMasinformacion.TextBox11 = ListBox1.Column(10)
    frmMasinformacion.TextBox12 = ListBox1.Column(11)
    frmMasinformacion.TextBox13 = ListBox1.Column(14)
    frmMasinformacion.TextBox14 = ListBox1.Column(13)
    frmMasinformacion.TextBox15 = ListBox1.Column(12)
'copia valor de la primer columna
Dim strList As String
'Dim i As Integer
For i = 0 To Me.ListBox1.ListCount - 1
   If Me.ListBox1.Selected(i) = True Then
      If Len(Trim(Me.ListBox1.List(i))) > 0 Then ' blank values excluded here
         strList = strList & Trim(Me.ListBox1.List(i)) & " " & vbNewLine '
      End If
   End If
Next i
Dim MyData As DataObject
Set MyData = New DataObject
MyData.Clear
MyData.SetText Trim(strList)
MyData.PutInClipboard
End Sub

Gracias por tu tiempo.

Revisa este apartado que puede ayudarte

https://ayudaexcel.com/foro/topic/32891-error-en-el-metodo-delete-de-la-clase-range/

1 respuesta más de otro experto

Respuesta
1

Reemplaza tu código por lo siguiente:

Esta línea debe ir al inicio de todo el código:

Dim borrando As Boolean



Dim borrando As Boolean
'Eliminar el registro
Private Sub CommandButton4_Click()
  Dim Pregunta As Variant
  Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "")
  If Pregunta <> vbNo Then
    borrando = True
    ActiveCell.EntireRow.Delete
    Call CommandButton5_Click
    borrando = False
  End If
End Sub
Private Sub CommandButton5_Click()
 'Act.Por.Dante Amor
  Dim h1 As Worksheet, h2 As Worksheet
  Dim j As Long, n As Long, i As Long, u As Long
  Set h1 = Sheets("Hoja1")
  Set h2 = Sheets("Temporal")
  '
  If Me.txtFiltro1.Value = "" Then Exit Sub
  If cmbEncabezado = "" Then Exit Sub
  '
  h2.Cells.Clear
  ListBox1.RowSource = ""
  h1.Rows(1).Copy h2.Rows(1)
  '
  j = cmbEncabezado.ListIndex + 1
  n = 2
  '
  For i = 2 To Range("a1").CurrentRegion.Rows.Count
    If LCase(Cells(i, j)) Like "*" & LCase(txtFiltro1) & "*" Then
        h1.Rows(i).Copy h2.Rows(n)
        n = n + 1
    End If
  Next i
  u = h2.Range("A" & Rows.Count).End(xlUp).Row
  If u = 1 Then
    MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
    Exit Sub
  End If
  ListBox1.RowSource = h2.Name & "!A2:Z" & u
End Sub
'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
  Dim Rango As Range
  Dim cuenta As Long, i As Long, valor As Variant
  If borrando = True Then Exit Sub
  Range("a2").Activate
  cuenta = Me.ListBox1.ListCount
  Set Rango = Range("A1").CurrentRegion 'marca de error al intentar borrar
  For i = 0 To cuenta - 1
      If Me.ListBox1.Selected(i) Then
          valor = Me.ListBox1.List(i)
          Rango.Find(What:=valor, LookAt:=xlWhole, After:=ActiveCell).Activate
      End If
  Next i
  frmMasinformacion.Show 'activa con un click el formulario con mas información
  frmMasinformacion.TextBox1 = ListBox1.Column(0)
  frmMasinformacion.TextBox1 = ListBox1.Column(0)
  frmMasinformacion.TextBox2 = ListBox1.Column(1)
  frmMasinformacion.TextBox3 = ListBox1.Column(2)
  frmMasinformacion.TextBox4 = ListBox1.Column(3)
  frmMasinformacion.TextBox5 = ListBox1.Column(4)
  frmMasinformacion.TextBox6 = ListBox1.Column(5)
  frmMasinformacion.TextBox7 = ListBox1.Column(6)
  frmMasinformacion.TextBox8 = ListBox1.Column(7)
  frmMasinformacion.TextBox9 = ListBox1.Column(8)
  frmMasinformacion.TextBox10 = ListBox1.Column(9)
  frmMasinformacion.TextBox11 = ListBox1.Column(10)
  frmMasinformacion.TextBox12 = ListBox1.Column(11)
  frmMasinformacion.TextBox13 = ListBox1.Column(14)
  frmMasinformacion.TextBox14 = ListBox1.Column(13)
  frmMasinformacion.TextBox15 = ListBox1.Column(12)
  'copia valor de la primer columna
  Dim strList As String
  'Dim i As Integer
  For i = 0 To Me.ListBox1.ListCount - 1
     If Me.ListBox1.Selected(i) = True Then
        If Len(Trim(Me.ListBox1.List(i))) > 0 Then ' blank values excluded here
           strList = strList & Trim(Me.ListBox1.List(i)) & " " & vbNewLine '
        End If
     End If
  Next i
  Dim MyData As DataObject
  Set MyData = New DataObject
  MyData. Clear
  MyData. SetText Trim(strList)
  MyData. PutInClipboard
End Sub

Eso resuelve el problema cuando intentas borrar. Pero ya no revisé el resto de tu código. Si tienes algún otro problema, crea una nueva pregunta.

¡Gracias! 

Me alegra ayudar. No o l v i d e s valorar la respuesta. ¡Gracias! Por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas