Excel vba宏以插入仅在第一个工作表上正常工作的行

Excel vba宏以插入仅在第一个工作表上正常工作的行,vba,excel,Vba,Excel,如果某个日期不是今天,我有一个宏在该日期上方插入一行数据。然后在日期列中添加今天的日期。这是在30个工作表中完成的,但只有第一个工作表正确地在正确的位置添加了行,并在正确的单元格中添加了日期。所有的代码都应该在A3”上方插入一行,但其余的代码都在A4上方插入一行。下面是我正在使用的当前代码,我认为这可能是一个范围问题,但在测试时没有运气 Sub UpdatePrices() Dim ws As Worksheet, Ldate As String, DateRng As Rang

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

    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
Sub-UpdatePrices()
Dim ws作为工作表,Ldate作为字符串,DateRng作为范围
Set DateRng=图纸(“AXP”)。范围(“A3”)日期范围为最后日期
Ldate=DateRng.Value'将Ldate定义为最近的日期
对于此工作簿中的每个ws。工作表
ws.Select
'插入包含今天日期的新行,并排除工作表
如果Ldate Date和UCase(ws.Name)“DATA”和UCase(ws.Name)“UPDATE”,那么
ws.Rows(DateRng.Row).EntireRow.Insert
ws.Cells(DateRng.Row,DateRng.Column).Offset(-1,0)=日期
如果结束
下一个
端接头

插入行时,
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
DateRngRow=Sheets(“AXP”)。范围(“A3”)。行的日期范围是最后日期
DateRngCol=图纸(“AXP”).范围(“A3”).列
Ldate=图纸(“AXP”)。范围(“A3”)。值“将Ldate定义为最新日期
对于此工作簿中的每个ws。工作表
ws.Select
'插入包含今天日期的新行,并排除工作表
如果Ldate Date和UCase(ws.Name)“DATA”和UCase(ws.Name)“UPDATE”,那么
ws.Rows(DateRngRow).EntireRow.Insert
ws.Cells(DateRngRow,DateRngCol)=日期
如果结束
下一个

下面的代码是您的规范下的工作代码。下面的代码中还有对原始代码的一些非常小的速度提升:只调用日期函数一次,只检查最后一个日期是否小于日期一次

如果您说您将始终在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
Sub-UpdatePrices()
将ws设置为工作表
日期
今天黯淡如白昼
Dim DateRng As范围
Set DateRng=图纸(“图纸1”)。范围(“A3”)日期范围为最后日期
Ldate=CDate(DateRng.Value)'将Ldate定义为最近的日期
今天=日期
如果Ldate<今天那么
对于此工作簿中的每个ws。工作表
ws.Select
'插入包含今天日期的新行,并排除工作表
如果UCase(ws.Name)“数据”和UCase(ws.Name)“更新”,那么
ws.Rows(3).EntireRow.Insert
ws.Cells(3,1)=今天
如果结束
下一个
如果结束
端接头

被您在此处的解释弄糊涂了..“该行应插入A3上方”,但其他行应插入“A4”上方的一行。您的意思是,第一张工作表上的行应该插入A3以上,其他所有工作表都应该插入A4以上吗?对不起,我的意思是,所有工作表都应该在A3以上插入一行,但只有第一张工作表(即AXP)这样做,其余工作表将其行插入A4以上仍然没有意义。让我们做一个例子。。。。如果您的工作簿有3张工作表,那么在这3张工作表中的每一张工作表上的行应该插入到哪里…?在所有3张工作表上的A3上方谢谢。我现在明白了,在那里添加一个变量可以使这些单元格保持不变。这起作用了。