2017-04-19 79 views
0

首先要做的事 - 我是一个完整的VBA新手,我放在一起的代码是完整的试验和错误。Excel VBA复制基于水平列表的现有工作表

我试图创建一个代码,它允许我根据“统计”工作表第6行中的部门名称的水平列表创建一个现有工作表(标题为“模板”)的副本(从单元格开始F6)。对于需要包含在文档中的任何新部门,用户可以简单地将新标题添加到下一个单元格(G6,H6等)中,按按钮运行vba,并且将出现一个新的工作表,新标题为工作表标题。

我需要这样做的原因是我使用INDIRECT函数来计算基于部门数据的百分比,我不想依赖谁在将来知道如何修改某些内容Excel(即复制和粘贴现有工作表,重命名并适当更新列表)。

我已经把该代码是这样的:

Sub New_worksheet() 

Dim j As Integer 
Dim ws As Worksheet 
Dim sh As Worksheet 
Set ws = Sheets("Template") 
Set sh = Sheets("Statistics") 
Set Rng = Cells(6, Columns.Count).End(xlToLeft) 

Application.ScreenUpdating = 0 

For j = 5 To Rng.Column 
Sheets("Template").Copy Before:=sh 
ActiveSheet.Name = sh.Range("6" & j).Value 
Next j 

End Sub 

,但我得到与ActiveSheet.Name = sh.Range问​​题( “6” & j)的.value的一部分。我想我已经整理了其余代码中的问题,但由于它不断调试,所以我不确定。

任何人都可以帮忙吗?

+0

快速使用宏记录器会告诉你,“范围”需要以列和行的形式,例如, '范围( “A1”)'。您可以使用'Cells'而不是'Range'并保留现有公式。 – SJR

回答

0

对于范围需要定义列然后行。您可以使用单元格而不是范围。 ActiveSheet.Name = sh.Cells(6, j).Value