【发布时间】:2015-04-06 06:49:37
【问题描述】:
我有一些非常简单的代码,可以在当前工作表之后向 Excel 文档添加一个新工作表,然后将其名称更改为在用户窗体的文本框中输入的名称。在新工作簿上工作正常,但在具有许多现有工作表的工作簿中,它会创建新工作表,但不会重命名它。
这只会在您第一次运行此代码时发生,下次它会正常运行。更奇怪的是,如果您打开 VBA 编辑器来尝试调试它,它也会运行良好。这显然使查找错误变得非常困难。
我使用的代码在这里:
Dim WS As Worksheet
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
WS.name = txtSheetName.value
很简单。我想知道这个问题是否是它试图在正确创建工作表之前重命名它?有没有更好的方法来编写这段代码?
更新: 我已经开始使用 msgboxes 进行调试,因为打开调试器会使问题停止,而且它似乎只是在中途停止处理代码:
Dim WS As Worksheet
MsgBox (WS Is Nothing)
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
'***** Nothing after this point gets processed *******
MsgBox (WS Is Nothing)
MsgBox WS.name
WS.name = txtSheetName.value
MsgBox WS.name
【问题讨论】:
-
Excel 有很多方法可以让您开心。通常你对此无能为力。尝试各种比较没用的东西,比如用
Worksheets集合代替Sheets或者先把txtSheetName.value赋值给一个字符串变量。 -
看起来您在 txtSheetName 之前设置了名称。您是否在 txtSheetName_Change 事件中运行此代码?如果没有,那可能会解决问题。
-
@Marc 该事件是从一个按钮事件中运行的,该事件验证是否已设置文本框
-
提示特雷门。看来是时候换羊血和鸡毛了。有什么地方可以下载 xls 文件吗?
-
@marc 很遗憾不是因为它充满了数据,并且只出现在该工作表(或具有相似数据量的工作表)中,较小的工作表没有问题。