我有一个函数,它给了我最后一个打开的行,我称之为表格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
我知道为什么会得到两个不同的答案?
答案 0 :(得分:3)
始终限定对Cells
,Rows
,Columns
,Range
等的引用,除非您完全确定要引用当前有效的工作表:
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
不确定偏移部分。