在最后一个单元格中查找值并将数据与运行宏进行比较

时间:2018-03-05 22:12:10

标签: excel-vba vba excel

*编辑 这就是最终的工作方式。插入新行时,下面的解决方案不会运行AddProj。

Sub Worksheet_Calculate()

Dim X As Range
Set X = LastCell 'The X is superflous, you could just use the LastCell variable
    If Sheet5.Range("A" & Rows.Count).Value < X.Value Then
        X.Value = Me.Range("A" & Rows.Count).Value
        AddProj
    End If
End Sub

模块1包含以下内容:

  Function LastCell() As Range
        With Sheet5
            Set LastCell = .Cells(Rows.Count, 1).End(xlUp)
        End With
    End Function
Sub AddProj()

Sheet1.Range("Master").Copy Sheet1.Range("C" & Rows.Count).End(xlUp).Offset(1)

End Sub

我正在尝试读取列的最后一个单元格中的数据。 &#34; X&#34;的价值应该是最后一个单元格的值。 然后我想&#34; X&#34;要与行数进行比较,如果行数小于&#34; X&#34;,请执行我的宏&#34; AddProj&#34;。 一次&#34; X&#34;和A列是相同的值,没有别的办法。

出于某种原因,它无法正常工作。 此代码位于工作表上,我希望进行比较。 请参阅下面的代码:

Private Sub Worksheet_Calculate()

X = LastCell

If Sheet5.Range("A" & Rows.Count).Value < Sheet5.Range("X").Value Then
  Sheet5.Range("X").Value = Me.Range("A" & Rows.Count).Value
  AddProj
End If


End Sub

Sub LastCell()
Range("A1").End(xlDown).Select

End Sub

&#34; AddProj&#34;是上面代码中引用的模块(谢谢@jsheeran @SJR ACyril寻求帮助):

Sub AddProj()

Sheet1.Range("Master").Copy Sheet1.Range("C" & Rows.Count).End(xlUp).Offset(1)

End Sub

提前致谢。

2 个答案:

答案 0 :(得分:0)

试试这个:

while

X是一个变量,但您将其称为Sub Worksheet_Calculate() Dim lRow As Long lRow = Sheet5.Cells(Sheet5.Rows.Count, 1).End(xlUp).Row If Sheet5.Cells(lRow, 1) > lRow Then Sheet5.Cells(lRow, 1) = lRow AddProj End If End Sub 。同时避免使用"X",因为它没有必要,即使在这种情况下也什么也不做,因为首先.Select不能返回值,第二Sub也没有返回值。计算最后一行的最佳方法是:.Select

答案 1 :(得分:0)

这只是UPG很好的回答。

Dim lRow As Long
lRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row

    If lRow >= Sheet1.Cells(lRow, 1) Then
        Exit Sub
    Else: AddProj
    End If