2015-04-15 169 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.