调用相同功能的VBA提供2个不同的答案

时间:2017-11-02 23:03:57

标签: vba excel-vba excel

我有一个函数,它给了我最后一个打开的行,我称之为表格2工作表。当我调用该函数时,我会从每张表中得到不同的答案。一个给了我正确的值,另一个工作表给了我一个更少的值。我试过打破这个功能,但最后差异出现在主行(长行)的后半部分,我使用Abs

我可能没有很好地解释它,但代码使用两个不同工作表中的按钮运行,并查看两个工作表中的一个上的相同数据。意思是,代码在完全相同的数据上运行,结果不同,具体取决于我按下的按钮。 (两个按钮都调用完全相同的宏来运行代码)

我从一个网站上获得了代码,该代码显示了一个人可以从工作表中获取最后一行的所有方式。

我的代码:

Public Function lastOpenRow(sheetName) As Long
    lastOpenRow = 1
    With sheetName
        For a = 1 To 50
            Count = Worksheets(sheetName).Cells(Rows.Count, a).End(xlUp).Offset(Abs(Cells(Rows.Count, 1).End(xlUp).value <> ""), 0).Row
            If lastOpenRow < Count Then
                lastOpenRow = Count
            End If
        Next a
        MsgBox "The lastOpenRow and Count = " & lastOpenRow & " " & Count

    End With
End Function

我知道为什么会得到两个不同的答案?

2 个答案:

答案 0 :(得分:3)

始终限定对CellsRowsColumnsRange等的引用,除非您完全确定要引用当前有效的工作表:

Public Function lastOpenRow(sheetName) As Long
    lastOpenRow = 1
    With Worksheets(sheetName) 'I'll make use of this by just typing ".something"
                               ' rather than saying "Worksheets(sheetName).something"
        For a = 1 To 50
            Count = .Cells(.Rows.Count, a).End(xlUp).Offset(Abs(.Cells(.Rows.Count, 1).End(xlUp).value <> ""), 0).Row
            If lastOpenRow < Count Then
                lastOpenRow = Count
            End If
        Next a
        MsgBox "The lastOpenRow and Count = " & lastOpenRow & " " & Count

    End With
End Function

答案 1 :(得分:2)

哦,不管怎么说,不妨发帖。至少我已经声明了所有变量; - )

Public Function LastOpenRow(ByVal psSheetName As String) As Long
    Dim result As Long
    Dim colIndex As Long
    Dim colLastRow As Long

    With ThisWorkbook.Worksheets(psSheetName)
        For colIndex = 1 To 50
            colLastRow = .Cells(.Rows.Count, colIndex).End(xlUp).Offset(Abs(.Cells(.Rows.Count, 1).End(xlUp).Value <> ""), 0).Row
            If result < colLastRow Then
                result = colLastRow
            End If
        Next
    End With

    LastOpenRow = result
End Function

不确定偏移部分。