1

我想知道为什么 VBA 在尝试编写此代码时告诉我缺少 SUB 函数。目的应该是当工作表被称为 NVT 时,代码应该跳过任何操作并转到下一个将被激活的工作表(在下一个命令中)。在此操作结束时,我应该删除没有填写“特定名称”或“NVT”的每张空白表。没有此选项,公式运行良好。我保存这段代码没有问题,公式本身也没有问题。欢迎提出任何建议。我认为尚未发布此威胁。如果您需要更多信息,请告诉我。原始代码很长,只想说明如何解决这个问题。感谢谁将回答这个威胁。

Sub Printtabs()
' Print
ThisWorkbook.Activate
If ThisWorkbook.Sheets(7) = ("NVT") Then Skip
If ThisWorkbook.Sheets(7) = ("NAME SPECIFIC 1") Then
'process formula
End If
If Thisworkbook.Sheets (8) = ("NVT) Then Skip
If Thisworkbook.Sheets (8) = ("NAME SPECIFIC 2") Then
'process formula
End If
'then I should find the way to delete every "blanc" sheets in this workbook (becouse I skipped before and there will be blanc sheets) and save
End Sub
4

2 回答 2

2

不需要使用.Activate. 您可以直接使用工作表。此外,在删除工作表和关闭事件时,请始终使用正确的错误处理。

这是你正在尝试的吗?

Dim ws As Worksheet

Sub Printtabs()
    On Error GoTo Whoa

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = "NAME SPECIFIC 1" Then
            '~~> Process Formula
        ElseIf ws.Name = "NAME SPECIFIC 2" Then
            '~~> Process Formula
        Else
            If ws.Name <> "NTV" And WorksheetFunction.CountA(ws.Cells) = 0 Then
                Application.DisplayAlerts = False
                ws.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next ws

LetsContinue:
    Application.DisplayAlerts = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2013-04-06T19:56:46.920 回答
0

所以,我想出了如何删除我相信的空白表。只剩下 sheetnames 的问题。这部分代码我将在所有已处理公式的末尾运行。希望有人可以帮助我....

Dim ws As Worksheet
For Each ws In Worksheets
    If WorksheetFunction.CountA(ws.Cells) = 0 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    End If
Next ws
于 2013-04-06T18:54:57.583 回答