如何在Excel中重置图纸命名

如何在Excel中重置图纸命名,excel,vba,Excel,Vba,如果我打开Excel工作簿,然后手动删除“Sheet2”和“Sheet3”,下次单击“插入工作表”按钮时,新工作表将命名为“Sheet4” 但是,在删除“Sheet2”和“Sheet3”后,如果我保存并重新打开工作簿,下次单击“插入工作表”按钮时,新工作表将命名为“Sheet2” 所以Excel在某个地方存储了一个“最高工作表编号”变量,当工作表关闭时,该变量将被重置。我想用VBA重置这个 非常感谢并致以最良好的祝愿。不,如果不保存、关闭和重新打开工作簿,就无法“自然”完成此操作。sheets.

如果我打开Excel工作簿,然后手动删除“Sheet2”和“Sheet3”,下次单击“插入工作表”按钮时,新工作表将命名为“Sheet4”

但是,在删除“Sheet2”和“Sheet3”后,如果我保存并重新打开工作簿,下次单击“插入工作表”按钮时,新工作表将命名为“Sheet2”

所以Excel在某个地方存储了一个“最高工作表编号”变量,当工作表关闭时,该变量将被重置。我想用VBA重置这个


非常感谢并致以最良好的祝愿。

不,如果不保存、关闭和重新打开工作簿,就无法“自然”完成此操作。sheets.count属性实际上是只读的

但是你可以用vba更改名字,你显然知道。我确实同意,这并不真正令人满意

补充/更正:在excel中,工作表对象有两个不同的“名称”属性:sheet.name和sheet.CodeName。“名称”属性为“读/写”(即可以读、可以修改,但也可以修改),包含您看到的名称,该名称显示在excel的“图纸”选项卡上。CodeName属性是只读的。。。见:


你可以尝试破解它,我正在检查内存,看起来有两个整数保持工作表计数。但是如果你删除了一些工作表,那么数量也会减少,因此你可能需要扩大搜索范围以找到你要找的工作表

找到正确的内存地址后,尝试将其归零(可能是4个字节,但我会尝试将重要的字节归零)

下面是我用来查看内存的函数(它获取worksheets.count的内存地址后的前100个字节,然后添加一个工作表,然后再次获取100个字节)


这将更改图纸编号并保留名称

    Sub BatchChange_WSRefName()
' THIS IS MAINTENANCE CODE ONLY RUN MANUALLY
' Changes the Reference Names for all Worksheets
' in the active Workbook to Sheet + incrementing integer
Dim i As Integer, ws As Worksheet
i = 0
' Change to Temp first to prevent Naming errors
For Each ws In ActiveWorkbook.Worksheets
    i = i + 1
    On Error Resume Next
    ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = _
        "Temp" & i
    On Error GoTo 0
Next ws
' Change to Sheet + incrementing integer
i = 0
For Each ws In ActiveWorkbook.Worksheets
    i = i + 1
    On Error Resume Next
    ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = _
        "Sheet" & i
    On Error GoTo 0
Next ws
Set ws = Nothing
End Sub

我很晚才去参加聚会,但我今天刚刚调查了一下,发现了另一个解决办法

如果打开Visual Basic窗口并在“图纸属性”区域中进行更改,则可以手动更改图纸编号(图纸1、图纸2等)。这还具有重置计数的额外好处,以便下一张新工作表将按顺序继续


到目前为止,我已经用vba更改了工作表名称和代码名-谢谢。谢谢。sheets.count(和worksheets.count)方法返回值1,但新工作表的名称仍然为“sheet4”,因此它似乎不在存储位置。再次感谢。对不起,我太挑剔了,但我认为这不能满足我的要求。我已经设法更改了名称和代码名(可能但很棘手),但这并没有解决问题。例如,在新工作簿中,创建新工作表,将其名称和代号更改为“xxx”(手动或使用VBA)。'“插入工作表”创建“Sheet5”,但如果您保存/关闭/打开,“插入工作表”创建“Sheet4”。非常感谢您的帮助-比我预期的技术性更强!如果您能够精确地找到代码以实现重置,我将非常感激。问题明确说明应使用VBA更改信息。这一建议不符合这一要求。
    Sub BatchChange_WSRefName()
' THIS IS MAINTENANCE CODE ONLY RUN MANUALLY
' Changes the Reference Names for all Worksheets
' in the active Workbook to Sheet + incrementing integer
Dim i As Integer, ws As Worksheet
i = 0
' Change to Temp first to prevent Naming errors
For Each ws In ActiveWorkbook.Worksheets
    i = i + 1
    On Error Resume Next
    ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = _
        "Temp" & i
    On Error GoTo 0
Next ws
' Change to Sheet + incrementing integer
i = 0
For Each ws In ActiveWorkbook.Worksheets
    i = i + 1
    On Error Resume Next
    ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = _
        "Sheet" & i
    On Error GoTo 0
Next ws
Set ws = Nothing
End Sub