2015-04-15 138 views
2

我有一个受保护的工作簿A,用户不允许用户从另一个工作表B复制表单。在工作簿AI中,考虑工作表1-19(目前只有13张,我允许将19张作为“系统表”,并且不能删除或修改。表20-30是“非系统表”,用户可以根据需要删除和修改。通过VBA代码重命名表单代码名称(不通过属性)

我期待有一个导入功能,用户可以将包含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

你能与所有19“系统”预填充工作表,直到他们被要求用他们'xlVeryHidden'? – Jeeped

+0

是的,我猜这是可能的。我也不想夸大文件大小。 – Tranman324

+0

空的工作表不会大大增加工作表的大小,工作表代码表可以被预先设定。如果大小是真正的考虑因素,请将其保存为XLSB而不是XLSM。 – Jeeped

回答

0

在Excel对象模型工作表有2个不同的名称属性:

Worksheet.Name Worksheet.CodeName

名称属性为读/写,并包含在片材标签上显示的名称。它是用户和VBA多变

代号属性是只读

您可以参考一个特定的片作为工作表(“数据”)。范围(“A1”)其中数据是请将.Name属性或Sheet1.Range(“A1”)其中Sheet1是工作表的代号。

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

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

只要确保可以通过编程访问Visual Basic项目。

文件 - >选项 - >信任中心 - >信任中心建立 - >宏设置 - >信任访问VBA项目对象模型。

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.