2013-10-23 56 views
0

如果该日期不是今天,我有一个宏插入数据上方的数据行。然后它在日期栏中添加今天的日期。这是通过30个工作表完成的,但只有第一个工作表正确地在正确的位置添加一行并在右侧的单元格中添加日期。这行应该插在A3“之上,但其余的插入一行上面的”A4“。下面是我正在使用的当前代码,我认为这可能是一个范围问题,但没有运气时,测试。Excel VBA宏插入行只能在第一张工作表上正常工作

Sub UpdatePrices() 
    Dim ws As Worksheet, Ldate As String, DateRng As Range 
Set DateRng = Sheets("AXP").Range("A3") 'date range is last date 
Ldate = DateRng.Value 'defines ldate as most recent date 


For Each ws In ThisWorkbook.Worksheets 
    ws.Select 
    'Inserts a new row with containing today's Date and exclude sheets 
    If Ldate <> Date And UCase(ws.Name) <> "DATA" And UCase(ws.Name) <> "UPDATE" Then 
     ws.Rows(DateRng.Row).EntireRow.Insert 
     ws.Cells(DateRng.Row, DateRng.Column).Offset(-1, 0) = Date 
    End If 

Next 

End Sub 
+0

你的解释困惑在这里..“行应插入A3以上”,但其余的插入一行上方“A4”“。你的意思是该行应插入上面的A3上第一张工作表和A4以上的所有其他纸张? – Jaycal

+0

对不起,我的意思是所有的纸张应该有一排插入A3以上,但只有第一张是AXP这样做,其余的纸张插入他们的行上面A4 – Nrandazzo

+0

仍然不是让我们来做一个例子....如果你的工作簿有3张纸,那么这3张纸上应该插入哪一行...? – Jaycal

回答

1

当你插入一行,你DateRng增加该行的3至4而应该存储在另一个变量中的原始行数和列数,因此不会改变

DateRngRow = Sheets("AXP").Range("A3").Row 'date range is last date 
DateRngCol = Sheets("AXP").Range("A3").Column 
Ldate = Sheets("AXP").Range("A3").Value 'defines ldate as most recent date 


For Each ws In ThisWorkbook.Worksheets 
    ws.Select 
    'Inserts a new row with containing today's Date and exclude sheets 
    If Ldate <> Date And UCase(ws.Name) <> "DATA" And UCase(ws.Name) <> "UPDATE" Then 
     ws.Rows(DateRngRow).EntireRow.Insert 
     ws.Cells(DateRngRow, DateRngCol) = Date 
    End If 

Next 
+0

谢谢。一个变量可以保持这些单元格的固定,这有效。 – Nrandazzo

+0

n o问题先生:) – Jaycal

0

以下代码是你的规范下的工作代码,在下面的代码中还有一些非常好次要速度增加到y我们的原始代码:只调用一次日期函数,只检查最后日期是否小于日期一次。

你说你总是会在3以上插入一行,并且新行列A应该有日期,下面的代码会这样做。

Sub UpdatePrices() 
Dim ws As Worksheet 
Dim Ldate As Date 
Dim Today As Date 
Dim DateRng As Range 

Set DateRng = Sheets("Sheet1").Range("A3") 'date range is last date 
Ldate = CDate(DateRng.Value) 'defines ldate as most recent date 
Today = Date 

If Ldate < Today Then 

For Each ws In ThisWorkbook.Worksheets 
    ws.Select 
    'Inserts a new row with containing today's Date and exclude sheets 

    If UCase(ws.Name) <> "DATA" And UCase(ws.Name) <> "UPDATE" Then 
     ws.Rows(3).EntireRow.Insert 
     ws.Cells(3, 1) = Today 
    End If 

Next 

End If 
End Sub