为什么这个VBA代码失败后,我重命名我的Excel工作表从默认的“Sheet1”?

Sub Button1_Click() LastRow1 = LastRow("Sheet1") End Sub Function LastRow(sheetname as String) As Long LastRow = Range(sheetname & "!A" & Rows.Count).End(xlUp).Row End Function 

当我的工作表被命名为“Sheet1”时,我的代码工作。 当我将其重命名为“堆栈溢出”时,它将失败。 为什么?

当我的工作表被命名为“Sheet1”时,我的代码工作。 当我将其重命名为“堆栈溢出”时,它将失败。 为什么?

那是因为后者有一个名字空间。

下面提到了正确的方法,两者都可以工作

 Function LastRow(sheetname As String) As Long LastRow = Range("'" & sheetname & "'!A" & Rows.Count).End(xlUp).Row End Function 

注意单引号?

IMP :我知道我在重复这个信息,但是我仍然觉得你应该按照我在最后一个问题给出的链接中提到的方法

为什么要发送表单名称string而不是工作表对象?

 Sub Button1_Click() LastRow1 = LastRow(Sheets("Sheet1")) End Sub Function LastRow(ws As Worksheet) As Long LastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row End Function