2016-01-31 55 views
0

嗨我試圖建立一個計時器,使用Application.Ontime填充行,但清除它們,如果他們超過30分鐘。這樣我就可以無限期地運行計時器,而不會累積超過30分鐘的數據並導致系統崩潰。到目前爲止,我可以成功地創建一個新的數據行。Excel VBA清除選定的行

我在A上有一個時間列,而B列是一個帶有1或0的標記,表示該行是否超過30分鐘。其他列有數據。 我想讓我的宏從第一個數據行(第10行)向下看,並找到第一行非空白(尚未清除),並在列B中有1(超過30分鐘),然後清除該行。所有其他行應不受影響,並保留在新空白區域下方。

應該只有一行帶有標籤,因爲這將每秒運行一次。

我想保持它的清潔,並使用rows.clear作爲選擇和刪除似乎慢的過程了很多..

任何幫助非常感謝,謝謝。

編輯:抱歉,由於缺乏清晰度,越來越模糊。

+0

編輯您的問題,包括你已經嘗試了什麼(工作或不)。你的敘述與標題有什麼關係? – Jeeped

回答

0

你可以試試這個:

Sub Clear() 

Dim wb As Workbook 
Dim ws1 As Worksheet 
Dim Lastrow As Long 
Dim i As Long 

Set wb = ThisWorkbook 
Set ws1 = wb.Sheets("Sheet1") 'Change the name of your sheet 

Lastrow = ws1.Range("A1").SpecialCells(xlCellTypeLastCell).Row 

With ws1 

i = 10 
    Do 
      If .Cells(i, "B") = 1 Then 
       .Cells(i, "B").EntireRow.ClearContents 
       '.Cells(i, "B").EntireRow.Delete 
      End If 

     i = i + 1 
    Loop Until i > Lastrow 
End With 

End Sub 

編輯#1

基於以下意見:

Sub Clear() 

Dim wb As Workbook 
Dim ws1 As Worksheet 
Dim Lastrow As Long 
Dim i As Long 

Set wb = ThisWorkbook 
Set ws1 = wb.Sheets("Sheet1") 'Change the name of your sheet 

Lastrow = ws1.Range("A1").SpecialCells(xlCellTypeLastCell).Row 

With ws1 

i = 1 
TimeLimit = Time - TimeSerial(0, 30, 0)' Time limit NOW - 30 minutes 
    Do 

      If .Cells(i, "A") < TimeLimit Then ' If value in column A is less then the Timelimit then 
       .Cells(i, "A").EntireRow.ClearContents 
      End If 

     i = i + 1 
    Loop Until i > Lastrow 
End With 

End Sub 
+0

「標記」是什麼意思?我的猜測是,如果你每秒都在運行這個宏,那麼宏可能不會完全運行,並且你可能會再次運行它... – manu

+0

嘗試運行上面的宏一次,看看它是否可以像你一樣工作期望。如果是,請接受答案併發布另一個問題,因爲這是另一個問題。但這一次把你的整個代碼,我們會幫助你。 – manu

+0

嗨對了,對不起,我在這裏掙扎很晚!我的計時器代碼寫在工作表的最後一個空行上。但是我需要標籤列(告訴宏的年齡的1)保持原位。我覺得現在感覺很笨拙 - 我認爲如果你的更高級的宏通過改變B = 1來改變它,它會更加優雅:if(lastrow,column A)>(時間限制按照片)。 –