如何在隐藏的工作表上使用VBAmacros。 并隐藏他们回来

我是VBA excelmacros的初学者。 通过使用这个论坛,我可以写一个代码,但我卡在一个地方。

我有10张工作簿。 第一张是我的input工作表,并进行所有的计算。 这些计算在后面的9张中拉出来。 这9张生成我的报告。在计算文件我想隐藏所有的下一个9个文件,并运行macros。 一旦计算好了。 我点击生成报告button,创build新文件并在我的桌面上打开并保存在我的文档中。

问题 – 不知何故,通过这个论坛,我能够生成一个代码,但是我不能隐藏和取消隐藏部分。 我写的代码取消隐藏计算文件中的所有文件(将它们取消隐藏),并隐藏在新生成的报告中的文件(因为所有文件不能隐藏在任何新的Excel中,我得到运行时错误“1004”无法设置工作表类的可见属性)。

这里是我的代码,请帮我解决它 – 所以我可以只有1张计算文件,而其余的时候macros保持隐藏工作。 新生成的文件将包含所有9个选项卡。

Sub SaveMain() Application.EnableEvents = False Sheets("Cover").Visible = True Sheets("2").Visible = True Sheets("3").Visible = True Sheets("4").Visible = True Sheets("5").Visible = True Sheets("6").Visible = True Sheets("7").Visible = True Sheets("8").Visible = True Sheets("9").Visible = True Dim Flname As String Flname = "Pump Datasheet" & InputBox("Enter Pump tag No P-XXXX:") & ".xls" Sheets(Array("Cover", "2", "3", "4", "5", "6", "7", "8", "9")).Copy Sheets("Cover").Visible = False Sheets("2").Visible = False Sheets("3").Visible = False Sheets("4").Visible = False Sheets("5").Visible = False Sheets("6").Visible = False Sheets("7").Visible = False Sheets("8").Visible = False Sheets("9").Visible = False newfilename = Flname With ActiveWorkbook .SaveAs newfilename, FileFormat:=50 End With Application.EnableEvents = True End Sub 

尝试隐藏和取消隐藏你的床单,这将节省你很多精力,如果以后需要改变。

 Dim ws As Worksheet 'To unhide all sheets For Each ws In ActiveWorkbook.Sheets ws.Visible = xlSheetVisible Next 'To hide all sheets except "Cover" For Each ws In ActiveWorkbook.Sheets If ws.Name <> "Cover" Then ws.Visible = xlSheetHidden End If Next 

build议你调整这个确保首先存在封面

如果是这样,循环隐藏床单可以更直接地设置 – 实际上并不需要一个然后testing。

 Sub Sheeted() Dim ws As Worksheet On Error Resume Next Set ws = Sheets("Cover") On Error GoTo 0 If ws Is Nothing Then Exit Sub For Each ws In ActiveWorkbook.Sheets ws.Visible = (ws.Name = "Cover") Next End Sub 

谢谢你们,我通过反复试验和你们的帮助弄明白了一些事情。 我只是把closures的东西,我看到这个组织的某处。

这里是基于所有build议的修改后的代码。 可能有一些不必要的东西,但不知何故它的作品。 非常感谢大家

 Sub SaveMain() Dim Flname As String Dim ws As Worksheet Application.EnableEvents = False For Each ws In ActiveWorkbook.Sheets ws.Visible = xlSheetVisible Next Flname = "Pump Datasheet-" & InputBox("Enter Pump tag No P-XXXX:") & ".xls" Sheets(Array("Cover", "2", "3", "4", "5", "6", "7", "8", "9")).Copy newfilename = Flname With ActiveWorkbook .SaveAs newfilename, FileFormat:=50 .Close 0 End With For Each ws In ActiveWorkbook.Sheets If ws.Name <> "Calculations" Then ws.Visible = xlSheetVeryHidden End If Next Application.EnableEvents = True End Sub