通过VBA代码重命名工作表代码名称(不通过属性)

时间:2015-04-15 09:19:28

标签: excel vba excel-vba

我有一个受保护的工作簿A,用户不允许用户从另一个工作簿B复制工作表。在工作簿AI中考虑工作表1-19(截至目前仅有13张,未来允许19张)扩展工作簿)作为"系统表"并且不能删除或修改。表20-30是"非系统表"用户可以根据需要删除和修改的位置。

我希望有一个导入功能,用户可以将包含1张工作簿的工作簿B导入工作簿A.工作簿A将检查有多少"非系统工作表"当前存在并在最后插入新工作表,工作表编号为20+。例如:

Total sheets in workbook A = 18

Total "system sheets" in A = 13 (sheet 1-sheet 13)

Total "non system sheets" in A = 5 (sheet 20-sheet 24)

如果我要导入新的工作表工作簿A将其指定为工作表25

我希望VBA更改代码名称(工作表编号)而不是工作表的名称。

我已经尝试过寻找方法,有人可以指出我正确的方向如何做到这一点?谢谢!

2 个答案:

答案 0 :(得分:0)

在Excel对象模型中,Worksheet有2个不同的名称属性:

Worksheet.Name Worksheet.CodeName

Name属性是读/写,包含工作表选项卡上显示的名称。用户和VBA可更改

CodeName属性是只读的

您可以将特定工作表引用为工作表("数据")。范​​围(" A1")其中Data是.Name属性或Sheet1.Range(" A1")其中Sheet1是工作表的代号。

编辑: 您可以通过访问VBA项目模型组件可扩展性来更改CodeName属性。

ThisWorkbook.VBProject.VBComponents(Sheets("Sheetname").CodeName).Name = "Sheet" & Workbook.Sheets.Count

确保以编程方式访问visual basic项目。

档案 - >选项 - >信托中心 - >信托中心设置 - >宏设置 - >信任访问VBA项目对象模型。

答案 1 :(得分:0)

在您的特定示例中,您可以在用户将其导入工作簿A之前修改工作簿B中的CodeName - 因为如果将工作表复制到另一个工作簿,它将保留其CodeName。否则你必须修改VBProject本身,例如:

<Workbook>.VBProject.VBComponents(<Workbook>.Sheets(<SheetName>).CodeName).Properties("_Codename").value = <CodeName>

我想出了一个稍微不同的复制解决方案(并经过测试),我复制工作表的工作簿的VBAProject受密码保护,这意味着上面的代码抛出:

50289 : Can't perform operation since the project is protected.