Vba Application.Sheets.count返回的值为1
我正在尝试获取活动工作簿中的工作表计数。当我运行Vba Application.Sheets.count返回的值为1,vba,userform,excel-2016,Vba,Userform,Excel 2016,我正在尝试获取活动工作簿中的工作表计数。当我运行Application.Sheets.Count时,我得到的值与我预期的值相差一倍,我应该得到76,我得到75。在ProjectExplorer中,我发现了一张奇怪的工作表,标签为ThisWorkbook(参见下图中的工作表52)。我真的很想了解这种行为,因为它对我以后的工作有影响。如有任何见解,将不胜感激 Private Sub UserForm_Initialize() Dim wsCnt As Long wsCnt = Ap
Application.Sheets.Count
时,我得到的值与我预期的值相差一倍,我应该得到76,我得到75。在ProjectExplorer中,我发现了一张奇怪的工作表,标签为ThisWorkbook(参见下图中的工作表52)。我真的很想了解这种行为,因为它对我以后的工作有影响。如有任何见解,将不胜感激
Private Sub UserForm_Initialize()
Dim wsCnt As Long
wsCnt = Application.Sheets.Count
MsgBox wsCnt
End Sub
编辑:鉴于下面的一些贡献,我提供以下内容,以进一步澄清我所看到的,并进一步深入了解为什么在这种情况下它是重要的
上图是我所看到的更完整的画面。请注意,此工作簿
位于Project Explorer窗口的底部。然而,出于某种原因,第52页也被称为本工作簿
这在上下文中很重要,因为该值稍后将用于在所有创建的图纸中递增,这些图纸的数量将随时间而变化。由于Sheet52
会增加纸张计数,但不会增加纸张数量,因此我会少一张。我可以通过添加一个,然后检查以确保在循环的每次迭代中,表值不等于52来引入一种变通方法,但除了是一种不雅观的方法之外,如果异常再次出现,这也可能在将来导致问题。我真的很想了解这种行为。我在文档中没有找到任何说明需要创建此工作表的内容,我也没有看到像Sheet52这样的此工作簿工作表被创建,我也无法理解需要创建它的任何原因。我遵从社会的集体智慧
编辑2:关于重复问题
这个问题是重复的,这是因为我对生成Sheet52
时发生了什么感到好奇。然而,问题与获得错误的纸张计数有关,这在中没有解决。这些信息在某些方面很有启发性,最终使我更接近于答案。正如@BigBen提到的,请进一步查看本工作簿的文档
修改后的代码应满足以下要求:
Private Sub UserForm_Initialize()
Dim wsCnt As Long
wsCnt = ActiveWorkbook.Worksheets.Count
MsgBox wsCnt
End sub
正如@BigBen提到的,请进一步查看此工作簿上的文档
修改后的代码应满足以下要求:
Private Sub UserForm_Initialize()
Dim wsCnt As Long
wsCnt = ActiveWorkbook.Worksheets.Count
MsgBox wsCnt
End sub
请参阅文档。它不是一个工作表
,而是一个工作簿
。现在您已经向我们展示了完整的图片,看起来您的文件已损坏。我建议你重建它。@chris谢谢你给我指出这个资源。这可能是52页的原因,我很高兴能对这个问题有一个更清晰的理解,但是,这并不能解决我遇到的问题。我尝试重建文件并将其保存为二进制工作表,但工作表计数仍处于关闭状态,现在缺少工作表54。这两种情况导致了相同的问题;我需要检索工作表的数量,但仍然得到工作表计数-1。如何做到这一点是我需要回答的问题。@baz问题是,一旦修复了损坏,Worksheets.Count
将为您提供正确的值。@chris这是问题的一部分,但我仍然对工作表的代码名有问题。为了安全起见,我将所有工作表转移到新工作簿,并将其保存为二进制工作簿后,我仍然必须使用ThisWorkbook.VBProject.VBComponents(“Sheet1”).Name=“NewCodeName”
和for
循环来重命名工作簿中54和最后一张工作表之间的每一张工作表。请参阅文档。它不是一个工作表
,而是一个工作簿
。现在您已经向我们展示了完整的图片,看起来您的文件已损坏。我建议你重建它。@chris谢谢你给我指出这个资源。这可能是52页的原因,我很高兴能对这个问题有一个更清晰的理解,但是,这并不能解决我遇到的问题。我尝试重建文件并将其保存为二进制工作表,但工作表计数仍处于关闭状态,现在缺少工作表54。这两种情况导致了相同的问题;我需要检索工作表的数量,但仍然得到工作表计数-1。如何做到这一点是我需要回答的问题。@baz问题是,一旦修复了损坏,Worksheets.Count
将为您提供正确的值。@chris这是问题的一部分,但我仍然对工作表的代码名有问题。为了安全起见,我将所有工作表转移到新工作簿,并将其保存为二进制工作簿后,我仍然必须使用thiswoolk.VBProject.VBComponents(“Sheet1”).Name=“NewCodeName”
使用for
循环重命名工作簿中54页和最后一页之间的每张工作表。OP表示活动工作簿中的工作表可能是也可能不是此工作簿
感谢指针编辑的代码以适应OP。@chris感谢您强调这一重要区别。但是,在本例中,它们是相同的。@哈佛感谢您的输入,但无论是ThisWorkbook
还是ActiveWorkbook
都没有更改输出。我将编辑我的问题以显示我的意思并添加其他信息。OP说活动工作簿中的工作表可能是也可能不是ThisWorkbook
,感谢指针编辑的代码适合OP。@chris感谢您强调这一重要区别。但是,在本例中,它们是相同的。@哈佛感谢您的输入,但无论是ThisWorkbook
还是ActiveWorkbook
都没有更改输出。我将编辑我的问题以显示我的意思并添加其他信息。