【发布时间】:2020-07-28 08:58:48
【问题描述】:
我在 Excel VBA 中有一些代码,它的作用是每当用户打开特定工作簿时,它会从最后一张工作表中复制内容,然后将这个新工作表放在最后,然后给出一个新工作表通过输入日期格式为工作表命名。问题是,如果由于某种原因您需要在同一天再次打开此工作簿,则会出现错误,因为工作表的名称已被占用。
我正在尝试找到一个解决方案,如果名称已经存在,则不要添加新工作表。可能我的代码的某些部分是正确的,但我猜代码行的顺序可能是导致它出错的原因。
Sub Auto()
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Select
For i = 1 To Sheets.Count
If Sheets(i).Name = UCase(Format(Now, "DDMMM")) Then
exists = True
End If
Next i
If Not exists Then
Sheets(Sheets.Count).Name = UCase(Format(Now, "DDMMM"))
End If
Range("A3:P3").Select
ActiveCell.FormulaR1C1 = Format(Now, "medium date")
End Sub
我刚刚添加了循环条件,但此代码有两处错误。 if 将继续查找工作簿中的每张纸,因此如果您有 200 张纸,则可能需要一些时间才能退出循环。另一个是,每当您添加一个作为另一个副本的工作表时,Excel 都会将相应副本(Sheet (2))添加到工作表的名称中,因此循环不会执行任何操作,因为它永远不会找到相同的名称。
因此,如果您有更好的方法来检查工作表名称是否已存在,我将很高兴学习。
谢谢
【问题讨论】:
-
这能回答你的问题吗? Test or check if sheet exists
-
我已经阅读了那里的一些建议,我可以看到名称是为某些东西预定义的。对于工作表的名称,我使用的是将名称格式化为日期。我已经尝试了一些解决方案,甚至是循环,但循环会继续,它不会找到相同的名称,因为首先你需要行代码
Sheets(Sheets.Count).Name = UCase(Format(Now, "DDMMM")),但是如果你尝试在循环之前运行它,它会给你一个运行错误。 -
第一次循环并查看工作表是否存在,或使用第一条评论中提供的链接中的方法。如果工作表存在,
Exit Sub。否则,进行复制和重命名。
标签: excel