如何在 Excel VBA 中获取最后一张工作表?

如何在 Excel VBA 中获取最后一张工作表?

我有一张名为“End”的工作表,需要将其移至所有可用工作表的最后一张。我需要使用 VBA 执行此操作。

我有一个可以工作的排序例程,我只需要移动的语法。这是我有的:

Private Sub CommandButton263_Click()
Dim i As Integer
Dim j As Integer
For i = 1 To Sheets.Count
  For j = 1 To Sheets.Count - 1
        If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
           Sheets(j).Move After:=Sheets(j + 1)
        End If
  Next j
Next i
Sheets("Navigation").Select
Sheets("Navigation").Move Before:=Sheets(1)
Sheets("Navigation (2)").Select
Sheets("Navigation (2)").Move Before:=Sheets(2)
Sheets("EstimateTemplate").Select
Sheets("EstimateTemplate").Move Before:=Sheets(3)
Sheets("Formulas").Select
Sheets("Formulas").Move Before:=Sheets(4)
Sheets("End").Move After:=Sheets(EOF)  'what can i use instead of EOF?
Sheets("Navigation (2)").Select
End Sub

具体来看以下行Sheets("End").Move After:=Sheets(EOF)-我可以用什么来获取最后一张表?

答案1

Sheets("End").Move after:=Worksheets(Worksheets.Count)

Worksheets.Count 将返回工作表的总数,而 Worksheets(index) 会选择特定编号的工作表。将两者结合起来,您应该会得到最后一个工作表,无论它是什么。

答案2

我首先要重命名工作表 VBA CodeName 属性,使其有意义。不要使用“Sheet1”或其他名称,而要使用有意义的修饰符

现在,如果有人更改工作表名称,您的 VBA 就会中断。

如果你的工作表有代码名称你可以做很多很棒的事情,例如:

EndSheet.Move after:=Worksheets(Worksheets.Count)

这意味着即使有人重命名该工作表,说“破坏你的宏!”它不会......破坏你的宏。

此外,关于选择,您可以这样做以使您的代码更可靠,更快和更强大:

NavigationSheet.Move Before:=Sheets(1)
NavigationTwoSheet.Move Before:=Sheets(2)
EstimateTemplateSheet.Move Before:=Sheets(3)
FormulasSheet.Move Before:=Sheets(4)
EndSheet.Move After:=Sheets(EOF)  
NavigationTwoSheet.Select

(假设您已在 VBE 中将所有工作表的 CodeName 重命名)

相关内容