Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Application.Sheets.count返回的值为1_Vba_Userform_Excel 2016 - Fatal编程技术网

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
都没有更改输出。我将编辑我的问题以显示我的意思并添加其他信息。