2015-11-13 2 views
0

У меня есть несколько листов с данными, все начиная с «ввода» в имени листа и всех столбцов даты в столбце A. Я хочу создать пользовательскую форму, которая позволяет пользователю для вставки даты в текстовое поле. Эта дата относится к столбцу даты в указанных листе. Когда пользователь нажал «ОК», макрос должен удалить все строки в листах из «Now»() до указанной даты. Другими словами, он начинается со дна и удаляется вверх. Строки сначала не сортируются в соответствии с датой. Это то, что я до сих пор:Удалить данные с этой даты до указанной даты в текстовом поле в пользовательской форме

Sub Rens_date() 
Dim lRow As Long 
Dim lcol 
Dim iCntr As Long 
Dim wb As Workbook 

Set wb = ThisWorkbook.Worksheets 
With wb 
    lRow = wb.Range("A" & Rows.Count).End(xlUp).Row 
    lcol = wb.Range("A" & Columns.Count).End(xlUp).Column 
    Set deleterange = .Range(Rens_inputbox.Value, .Cells(lRow, lcol)) 
End With 

For Each Row In deleterange 
    If wb.Range("A").Cells = Me.Rens_inputbox.Value Then _ 
     deleterange.Delete 
    End If 
Next 
End Sub 

код не работает:/

ответ

0

Поместите этот код на вашем Okay кнопку, и это должно работать. Он будет перебирать весь первый столбец всех листов, который имеет имя, начинающееся с «input_», ища дату между текущей датой и датой, введенной вами в textbox.

Private Sub CommandButton1_Click() 

    Dim actCell As Range 
    Dim lastDate As Date 
    Dim startDate As Date 
    Dim currentCellDate As Date 
    Dim ws As Worksheet 

    lastDate = CDate(TextBox1.Value) 
    startDate = Date 

    For Each ws In ActiveWorkbook.Worksheets 
     If LCase(ws.Name) Like "input_*" Then 
      For Each actCell In ws.ListObjects(1).DataBodyRange.Columns(1).Cells 
       currentCellDate = CDate(actCell.Value) 
       If currentCellDate > startDate And currentCellDate < lastDate Then 
        actCell.EntireRow.Delete 
       End If 
      Next 
     End If 
    Next 

End Sub 
Смежные вопросы