Application.Sheets.count返回的值减1

时间:2019-05-15 21:15:53

标签: vba userform excel-2016

我正在尝试在活动工作簿中计算工作表的数量。当我运行Application.Sheets.Count时,我得到的值与预期的76和75相差一个。在项目浏览器中,我发现了一个奇怪的表,名为ThisWorkbook(请参见下图的表52)。我非常想了解这种行为,因为它会对以后的工作产生影响。任何见识将不胜感激。

Private Sub UserForm_Initialize()
    Dim wsCnt As Long 
    wsCnt = Application.Sheets.Count
    MsgBox wsCnt
End Sub

enter image description here

编辑:鉴于下面的一些贡献,我提供以下内容以进一步阐明我所看到的内容,并提供更深入的了解,为什么它在这种情况下很重要。

上面的图片现在是我所看到的内容的完整图片。请注意,ThisWorkbook在项目浏览器窗口的底部。但是由于某种原因,工作表52也称为ThisWorkbook

这在上下文上很重要,因为此值以后将用于增加所有已创建工作表的数量,该工作表的数量会随着时间而变化。由于Sheet52会增加工作表数量,但不会增加工作表数量,因此我只差一个。我可以想像地引入一个变通方法,方法是仅添加一个,然后在每次循环迭代中检查以确保工作表值不等于52,但这种方法不雅观,如果将来出现异常收割,这将来也可能引起问题再次上升。我真的很想了解这种行为。我没有在文档中找到任何内容来指示需要创建此工作表,并且也没有像Sheet52那样看到过创建ThisWorkbook工作表,我也无法理解为什么需要这样做的任何原因被创建。我尊重社区的集体智慧。

编辑2:关于重复的问题

这个问题是重复的建议源于我对产生Sheet52的好奇心。但是,此问题与错误的工作表计数有关,that post中未解决。这些信息在某些方面具有指导意义,并最终使我更接近答案。

1 个答案:

答案 0 :(得分:0)

就像@BigBen提到的那样,进一步研究ThisWorkbook上的文档。

修改后的代码应该可以解决:

Private Sub UserForm_Initialize() 

   Dim wsCnt As Long 
   wsCnt = ActiveWorkbook.Worksheets.Count

   MsgBox wsCnt

End sub