在Excel中引用最近添加的工作表

时间:2017-11-07 18:28:55

标签: excel vba excel-vba

单击说明工作表上的按钮时,我的宏会运行。它设置为运行必须作为工作表从另一个工作簿添加到工作簿的数据。

但是,我不确定添加后工作表的名称是什么。有没有办法让我的宏在最近添加的工作表上运行而不是寻找特定的工作表名称?

我正在设想最终用户右键单击工作表选项卡并复制整个工作表。在这种情况下,名称将是Sheet1。但是,他们可能会创建一个新标签,其名称我不知道,并从数据工作表复制并粘贴到此新标签中。

我的宏当前激活Sheet1,然后在此工作表上运行宏。但是,用户可能会创建名为Sheet2或Data等的新工作表。在这种情况下,宏将找不到Sheet1。

有没有办法让宏找到最新的工作表而不是寻找工作表名称?

Dim datasheet As String, location As String, col As String, row As String
Dim i As Integer, LastRow As Integer, LastCol As Integer, lCol As Integer
Dim t As Long, LasRow As Long, LasCol As Long
Dim t As Long, LasRow As Long, LasCol As Long
Dim PSheet As Worksheet, DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range

' Don't show macro as the macro runs
Application.ScreenUpdating = False
Worksheets("Sheet1").Activate
datasheet = ActiveSheet.Name

'Moves active sheet to end of active workbook.
ActiveSheet.Move _
After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)

2 个答案:

答案 0 :(得分:2)

假设您没有更改各种工作表' 代码,添加的最后一个工作表应具有最高的数字代号,即使其他工作表已被删除。

dim w as long, lw as long, wsn as string
for w = 1 to worksheets.count
    if clng(replace(worksheets(w).codename, "Sheet", vbnullstring)) > lw then
        lw = int(replace(worksheets(w).codename, "Sheet", vbnullstring))
        wsn = worksheets(w).name
    end if
next w

with worksheets(wsn)
    'do stuff with the last added worksheet
end with

如果可以删除工作表,那么您可能需要仔细检查关闭并重新打开工作簿后代码序列没有重新启动。 附录:是的,如果工作簿已关闭并重新打开,则会重复使用已删除工作表的代号。

此方法应忽略在工作表队列中将最新工作表复制到的位置。

答案 1 :(得分:0)

在ThisWorkbook模块中,添加:

-70

然后在代码中查找Public sheetName As String Private Sub Workbook_NewSheet(ByVal Sh As Object) sheetName = ActiveSheet.Name End Sub

sheetName

@cyboashu是对的,从其他工作簿复制工作表时,这不起作用。

您可以尝试这一点,它首先在打开工作簿时使用工作表的名称填充数组。然后,当您运行宏时,它会查找该数组中的每个sheetName,如果找不到,则在打开文件后添加该工作表。 将其插入工作簿模块:

Worksheets(sheetName).Activate