Excel VBA重命名错误的工作表

Excel VBA重命名错误的工作表,vba,excel,excel-2007,Vba,Excel,Excel 2007,我有一个启用excel宏的工作簿,它有5张工作表。其中一张被命名为“NC”,另一张被命名为“SC”。我有一部分代码在这些表的名称中添加日期 图纸(“NC”).Name=“NC”和替换(日期“/”,“-”) 工作表(“SC”).Name=“SC”和替换(日期“/”,“-”) 然后,如果单击重置按钮,我会编写一个代码,将它们切换回以前的“NC”和“SC”名称,但这就是问题所在 第(2)页。Name=“NC” 第(3)页。Name=“SC” 工作表(2)。Name=“NC”工作正常 图纸(3)。但是,

我有一个启用excel宏的工作簿,它有5张工作表。其中一张被命名为“NC”,另一张被命名为“SC”。我有一部分代码在这些表的名称中添加日期

图纸(“NC”).Name=“NC”和替换(日期“/”,“-”) 工作表(“SC”).Name=“SC”和替换(日期“/”,“-”)

然后,如果单击重置按钮,我会编写一个代码,将它们切换回以前的“NC”和“SC”名称,但这就是问题所在

第(2)页。Name=“NC” 第(3)页。Name=“SC”

工作表(2)。Name=“NC”工作正常 图纸(3)。但是,Name=“SC”将重新命名图纸(4)

我认为无论您如何重新排列或排序工作表选项卡,这些工作表代码或工作表编号都不会改变。我不明白为什么它准确地重命名了表(2)而不是表(3)。看看下面我的项目浏览器,它将工作表(4)从“NCToday”重命名为“SC”。图纸(3)在图片中显示“SC”,但由于这是手动重置的,但您可以看到排列,因此代码图纸(3)。Name=“SC”不应将图纸(4)从“NCToday”重命名为“SC”


查阅工作表的方法有很多

使用

Sheets(number).Name 

'this will print all the names in the Sheets(i) order
for i = 1 to Sheets.count
    debug.pring sheets(i).name & " at index " & i
next i
Sheet2.name = "NC"
从左到右重命名工作簿中索引
number
处的工作表

使用

Sheets(number).Name 

'this will print all the names in the Sheets(i) order
for i = 1 to Sheets.count
    debug.pring sheets(i).name & " at index " & i
next i
Sheet2.name = "NC"
将重命名资源管理器中显示的VBA对象
Sheet2

我怀疑你想做:

Sheet2.Name = "NC" 
Sheet3.Name = "SC"
第(3)页不一定指第3页

例如:

如果我在即时窗口中键入,
?工作表(1).name
,我会得到以下结果:

表2

请注意,系统查看excel电子表格中的图纸顺序(表2、表1、表3),而不是VBA项目中的顺序(表1、表2、表3)

若要重新命名图纸,可能需要反转最初用于重命名图纸的方法:

Sheets("SC" & Replace(Date, "/", "-")).Name = "SC"

您可以使用Like选项在重命名之前比较图纸名称

Dim s as Worksheet
For each s in Worksheets

    if s.Name like "NC*" and not s.Name = "NCToday" then
         s.Name = "NC"
    end if

next
这可以解决你的页面洗牌,而不必求助于“不要重新洗牌评论”

这样的注释很容易被误解,并且可能会使代码在某个阶段遇到麻烦和错误

最好试着把它做得万无一失

祝你好运


干杯

嗨,肖恩,非常感谢你的快速回复。在看到您的答案之前,我做了一些测试,发现使用msgbox时,它遵循工作表顺序。我还是有点困惑,但我回来更新了,看到了你的回复,一切都像清水一样清澈:)不过我不能使用你的建议,如果他们试图在第二天(不同的日期)重置工作表名称,那将是一个问题。我刚刚放了一个通知“请不要重新排列工作表”。:)工作表(1)会给我“Sheet1”吗?尽管Sheet1的选项卡放在Sheet3之后?我认为使用工作表(1)可以得到我想要的,而不是工作表(1)?工作表(1)将按照excel工作簿上显示的顺序为您提供第一张工作表。如果您使用
Sheet1。
它将使用项目文件中显示的Sheet1,不管它的名称是什么。谢谢,每个工作表都有不同的列,我的代码包括循环语句,如sheets(SheetIndex)。值,在这个过程中,代码重命名这些工作表,因此对我来说非常复杂。我只希望没有人会重新安排工作表标签,否则会毁了他们的一天:P汉克斯·恩德兰,我真的发现了哪里出了问题,当您重新排列工作表的选项卡时,它也会更改工作表的代码/编号。@Jay注意,
Sheet2.Name
无论工作表的顺序如何都可以工作。这就是我要查找的:)但是我如何循环它呢?我的意思是,如果我需要重命名Sheet1.Name、Sheet2.Name和Sheet3.Name,或者为每一个都添加代码,有没有办法循环它,或者我必须不循环地执行它?@Jay我不这么认为,因为您正在引用每个工作表的特定对象。您可以在工作表中循环并检查代码名,或者如果您对vb项目具有受信任的编程访问权限,则可以使用
工作表(例如CStr(activeWorkbook.VBProject.VBComponents(“sheet”&n).Properties(“Name”)