我有一个适用的版本,但这个版本选择
Public Const GlobalSheetName As String = "Sammanställning,Pris_Schrack,Pris_Pelco,Pris_Swansson,Pris_Övrig"
Sub Tabortblad()
Dim ws As Worksheet
Dim ShName As String
Dim SnNumm As Long
char = Split(GlobalSheetName, ",")
SnNumm = UBound(char) - LBound(char) + 1
If Worksheets.Count = SnNumm Then 'bör ändra denna till större antal
MsgBox "Där finns bara " & SnNumm & " blad"
Else
strCancel = MsgBox("Är du säker på att du vill radera bladen", vbOKCancel, "Radera Blad")
If strCancel = "1" Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each ws In ActiveWorkbook.Worksheets
For Each char In Split(GlobalSheetName, ",")
If Not ws.Name = char Then
ws.Activate
Worksheets(ws.Name).Delete
End If
Next
Next
Sheets("Sammanställning").Range("B:B").Value = ""
Sheets("Sammanställning").Range("P68:R" & Sheets("Sammanställning").Cells(Rows.Count, "R").End(xlUp).Row + 1).Value = ""
Application.DisplayAlerts = True
End If
Application.ScreenUpdating = True
Worksheets("Sammanställning").Activate
Range("A1").Select
End If
End Sub
现在这是适用的版本
Sub Tabortblad()
Dim ws As Worksheet
Dim ShName As String
If Worksheets.Count = "5" Then 'bör ändra denna till större antal
MsgBox "Där finns bara 5 blad"
Else
strCancel = MsgBox("Är du säker på att du vill radera bladen", vbOKCancel, "Radera Blad")
If strCancel = "1" Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each ws In ActiveWorkbook.Worksheets
If Not ws.Name = "Sammanställning" Then
If Not ws.Name = "Pris_Schrack" Then
If Not ws.Name = "Pris_Pelco" Then
If Not ws.Name = "Pris_Swansson" Then
If Not ws.Name = "Pris_Övrig" Then
ws.Activate
Worksheets(ws.Name).Delete
End If
End If
End If
End If
End If
Next
Sheets("Sammanställning").Range("B:B").Value = ""
Sheets("Sammanställning").Range("P68:R" & Sheets("Sammanställning").Cells(Rows.Count, "R").End(xlUp).Row + 1).Value = ""
Application.DisplayAlerts = True
End If
Application.ScreenUpdating = True
Worksheets("Sammanställning").Activate
Range("A1").Select
End If
End Sub
问题是ws.Name
它在第一个版本中返回错误,在第二个版本中它运行正常。
我用它来删除我在另一个sub中添加的正确工作表。 我使用常量来收集工作表名称,所以如果我必须添加一个更容易。
答案 0 :(得分:1)
我确认第一个子程序有效,然后确认我无法获得第二个“不工作”的子程序。然后,通过添加以下内容,我能够完全运行第二个子例程:
option Explicit
Dim strCancel As String, char As Variant
首先,您应该始终在模块顶部包含“option explicit”,因为它会强制您正确定义变量。这是问题的根源,因为char
变量未定义,并且您的代码的某些行需要一个数组,所以它在那时失败了。至少,在我将char
更改为Variant之前,这就是我发生的事情。您可能不想使用char
的变体,我建议使用此变量研究代码行。
我无法进一步帮助,因为我不完全清楚代码的目标是什么,而且我不理解所使用的非英语单词。如果您有更多问题,请与我们联系。
答案 1 :(得分:0)
将工作表作为向后计数运行。
dim w as long
For w=ActiveWorkbook.Worksheets.count to 1 step-1
If iserror(application.match(Worksheets(w).Name, array("Sammanställning", "Pris_Schrack", "Pris_Pelco", "Pris_Swansson", "Pris_Övrig"), 0)) Then
Worksheets(w).Delete
End If
Next w
小心VBE不会将ä
或Ö
等字母转换为?
。 VBE不处理unicode。
答案 2 :(得分:0)
you could consider deleting in one shot:
Dim ws As Worksheet
Dim names As String
For Each ws In ActiveWorkbook.Worksheets
If InStr(GlobalSheetName, ws.Name) = 0 Then names = names & ws.Name & "|"
Next
If names <> "" Then Worksheets(Split(Left(names, Len(names) - 1), "|")).Delete