我有一个受保护的工作簿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更改代码名称(工作表编号)而不是工作表的名称。
我已经尝试过寻找方法,有人可以指出我正确的方向如何做到这一点?谢谢!
答案 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.