Excel 根据Sheet1中的活动单元格重命名新创建的图纸

Excel 根据Sheet1中的活动单元格重命名新创建的图纸,excel,rename,vba,Excel,Rename,Vba,我是VBA的新手,有一个问题需要解决,我相信这对你们来说将不仅仅是简单的问题。问题是: 我在A列中有公司名称的表格。我想要的是选择公司名称的单元格,单击按钮将运行一个基于模板创建新工作表的宏,并使用Sheet1公司名称中所选单元格的名称重命名新创建的工作表 宏通常可以工作,我只有重命名它的问题。我将非常感谢你的帮助。另外,对我的代码的任何评论都将非常有用。代码如下: Sub NewSheet() Dim wb As Workbook Dim ws As Worksheet Dim active

我是VBA的新手,有一个问题需要解决,我相信这对你们来说将不仅仅是简单的问题。问题是:

我在A列中有公司名称的表格。我想要的是选择公司名称的单元格,单击按钮将运行一个基于模板创建新工作表的宏,并使用Sheet1公司名称中所选单元格的名称重命名新创建的工作表

宏通常可以工作,我只有重命名它的问题。我将非常感谢你的帮助。另外,对我的代码的任何评论都将非常有用。代码如下:

Sub NewSheet()

Dim wb As Workbook
Dim ws As Worksheet
Dim activeWB As Workbook
Dim FilePath As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

On Error Resume Next
Set wb = Application.Workbooks.Open(FilePath)
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count)
activeWB.Activate

ActiveSheet.Name = Worksheets("Arkusz1").ActiveCell.Value

wb.Close False

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

您已将新工作表复制到末尾,因此您可以像这样获得最后一张工作表:

Set activeWB = ActiveWorkbook
' You copied sheet 1
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count)
' New sheet is last sheet
Dim sh As WorkSheet
Set sh = activeWB.Sheets(activeWB.Sheets.Count)
' Rename sheet
sh.Name = activeWB.Sheets("Arkusz1").ActiveCell.Value
请注意,依赖选择和活动单元格/工作表/工作簿是有风险的,并且会产生难以诊断的错误。尝试使用单元格地址而不是活动单元格。

如果需要使用活动单元格,可以使用以下代码:

Dim ShtName As String
ShtName = ActiveCell.Value2 ' <-- save the value of the ActiveCell

Set wb = Application.Workbooks.Open(FilePath)
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count)

' rename the sheet
activeWB.Sheets(activeWB.Sheets.Count).Name = ShtName

您的代码将打开工作簿。是否要在包含选定单元格的工作簿中创建新工作表,还是要打开一个工作簿并在另一个工作簿中创建新工作表?旁注:避免使用“下一步错误恢复”,这是一种不好的做法,因为它只会使错误静音,但不会处理错误。相反,请使用合适的。谢谢您的快速反应。嗯,在我的工作簿中,模板作为一个新的工作表打开,所以我认为它是一个工作表。我希望它与所选单元格所在的工作簿相同,以新工作表的形式打开。这完全符合我的要求!非常感谢你!谢谢你的评论,我会记住它,因为我将学习VBA。至于你的答案,我不能让它工作,不知道为什么。也许我做错了什么。幸运的是,Shai Rado的答案非常有效。啊,很高兴你的问题得到了解决,作为参考,这个问题的答案有一些很好的建议,可以避免选择它真正有。谢谢!