如何在隐藏的工作表上使用VBA宏。并将它们隐藏起来

时间:2016-05-25 21:51:45

标签: excel vba excel-vba

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

我在工作簿中有10张。 1st Sheet是我的输入工作表并完成所有计算。这些计算在后面的9张纸中提取。这9张纸生成我的报告。在计算文件中,我想隐藏所有接下来的9个文件并运行宏。一旦计算好了。我单击“生成报告”按钮,将创建新文件并在我的桌面上打开并保存在我的文档中。

问题 - 以某种方式通过这个论坛,我能够生成一个代码,可以做任何事情,但我无法隐藏和取消隐藏部分。 我编写的代码取消隐藏计算文件中的所有文件。(保持它们取消隐藏)并将文件隐藏在新生成的报告中。(因为所有文件都无法隐藏在任何新的Excel中,我得到运行时错误' 1004'无法设置工作表类的visible属性)。

这是我的代码请帮我解决 - 所以我只能在计算文件中有1张,而当宏工作时,其余的保持隐藏状态。新生成的文件将包含所有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

3 个答案:

答案 0 :(得分:1)

建议你调整一下以确保封面首先存在。

如果是这样,可以更直接地设置隐藏工作表的循环 - 实际上并不需要然后测试。

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

答案 1 :(得分:0)

尝试隐藏和取消隐藏这样的纸张,如果需要稍后更改,它将为您节省大量能源。

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

答案 2 :(得分:0)

谢谢你们 我有些如何通过反复试验和你的帮助弄明白了。 我只是把.close的东西放在我看到的这个组的某个地方。

以下是基于所有建议的修改后的代码。可能有一些不必要的东西但不知何故它有效。 非常感谢大家

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