【发布时间】:2017-11-08 06:39:56
【问题描述】:
当点击说明工作表上的按钮时,我的宏就会运行。它设置为在必须作为工作表从另一个工作簿添加到工作簿的数据上运行。
但是,我不确定添加后工作表的名称是什么。有没有办法让我的宏在最近添加的工作表上运行,而不是寻找特定的工作表名称?
我设想最终用户右键单击工作表选项卡并复制整个工作表。在这种情况下,名称将是 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)
【问题讨论】:
-
您也可以参考工作表的索引 -
Worksheets(1).Activate,甚至可以使用循环从一个切换到另一个。 -
如果你想找到最后一个工作表,你可以使用这个-
Worksheet(Worksheets.Count).Activate -
也许我们想多了。也许您可以只使用
Application.InputBox要求用户指向他们想要处理的工作表上的范围。例如Set DSheet = Application.InputBox(Prompt:="Select a cell on your data sheet", Type:=8).Worksheet -
这似乎是一个非常实用的想法。我会尝试一下。谢谢!
-
解决@YowE3K 的建议,您可以有一个输入框来询问工作表索引。另一种方法是使用
Public const sheetName as string并在将工作表添加到工作簿时触发以使用工作表名称填充它,我认为这将是最简单的方法(尽管不是特别有效)。