2015-04-11 12 views

cevap

7

aşağıdaki alt eserleri:

Private Sub deleteTableRowsBasedOnCriteria(tbl As ListObject, columnName As String, criteria As String) 

    Dim x As Long, lastrow As Long, lr As ListRow 
    lastrow = tbl.ListRows.Count 
    For x = lastrow To 1 Step -1 
     Set lr = tbl.ListRows(x) 
     If Intersect(lr.Range, tbl.ListColumns(columnName).Range).Value = criteria Then 
      'lr.Range.Select 
      lr.Delete 
     End If 
    Next x 

End Sub 

alt böyle infaz edilebilir:

Dim tbl As ListObject 
Set tbl = ThisWorkbook.Worksheets("Sheet1").ListObjects("tblFruits") 
Call deleteTableRowsBasedOnCriteria(tbl, "Fruit", "Apple") 
2

Eh, .listrows mülkiyet BİR liste satır veya TÜM liste satır ya sınırlıdır görünüyor . , Formülü gerekmeyebilir (ı ortadan kaldırmak istiyorum tüm satırları bana işaret edecek bir formülle bir sütun kurma

  1. : Bunu aşmanın bulundu

    kolay yolu ile yapıldı tercihen (söz konusu sütun üzerinde ListObject sıralama silinecek benim değer ListRows aralığının adresini alınıyor sıralama sonunda)

  2. de olacağını, böyle yapmakla bu durumda)

  3. I del olacak Son olarak, alınan menzili silme, hücreleri hareket ettirme. Bu kod belirli bir parça olarak

:

Sub Delete_LO_Rows 
    Const ctRemove as string = "Remove" 'value to be removed 
    Dim myLO as listobject, r as long 
    Dim N as integer 'number of the listcolumn with the formula 

    Set myLo = Sheet1.ListObjects("Table1") 'listobject goes here 

    With myLO 
     With .Sort 
      With .SortFields 
       .Clear 
       .Add Key:=.HeaderRowRange(myLO.ListColumns(N)), SortOn:= _ 
       xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
      End With   
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 

     On Error GoTo NoRemoveFound 
     r = Application.WorksheetFunction.Match(ctRemove, .ListColumns(.ListColumns.Count).DataBodyRange, 0) 
     Range(.parent.name & "!" & .DataBodyRange(r, 1).Address & ":" & .DataBodyRange(.ListRows.Count, .ListColumns.Count).Address).Delete xlShiftUp 
'Added the .parent.name to make sure the address is on the correct sure, but it will fail if there are any spaces or characters on the sheet name that will make it need a pair of '. 
'The error is just to skip these two lines in case the match returns an error. There's likely a better/cleaner way to do that. 
NoRemoveFound: 
    End With 
End sub 

Umarım yardımcı olur ...