2017-07-25 78 views
0

我是VBA的新手,并且有一个问题需要解决,对于您来说,这不仅仅是简单,我相信。问题是这样的:根据Sheet1中的活动单元重命名新创建的工作表

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

宏一般工作,我只有重命名它的问题。您的帮助将大大appriciated。另外对我的代码的任何评论一般都会非常有用。下面是代码:

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 
+1

你的代码打开的工作簿。是否要在具有选定单元格的工作簿中创建新工作表或是否要打开工作簿并在其他工作簿中创建新工作表? – teylyn

+0

注意:避免使用'On Error Resume Next'这是不好的做法,因为它只是静音错误但不处理它们。请使用正确的[错误处理](https://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/5411/error-handling)。 –

+0

感谢您的快速反应。那么,在我的工作簿中,模板以新工作表的形式打开,所以我认为它是一个工作表。我想让它与选定单元格相同的工作簿打开为新工作表。 – Thomas

回答

1

如果您需要使用ActiveCell,你可以使用类似下面的代码:

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 
+0

完全按照我的意愿工作!非常感谢你! – Thomas

0

您复制新的工作表到最后,这样你就可以得到最后一个工作表中保持像这样:

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 

请注意,依靠选择和活跃细胞/床单/工作簿是有风险,并且可以创建难以诊断的错误。尝试使用单元格地址而不是活动单元格。

+0

谢谢你的评论,我会记住,因为我将学习VBA。至于你的答案,我无法得到它的工作,不知道为什么。可能我做错了什么。幸运的是,来自Shai Rado的回答非常完美。 – Thomas

+0

嗯,很高兴你的问题得到解决,参考这个问题的答案有一些伟大的指针,以避免'选择'https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-宏 – Wolfie

+0

它真的有。非常感谢! – Thomas

相关问题