Excel 工作表功能故障
我有一个版本可以用,但这个版本不行Excel 工作表功能故障,excel,vba,Excel,Vba,我有一个版本可以用,但这个版本不行 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, ",") SnNum
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
它在第一个版本中返回错误,在第二个版本中工作正常
我用它来删除我在另一个子系统中添加的正确工作表。
我正在使用常量来收集工作表名称,因此如果我必须添加一个,它会更容易。我确认第一个子例程工作,然后确认我无法让第二个“不工作”子例程工作。然后,通过添加以下内容,我能够完全运行第二个子例程:
option Explicit
Dim strCancel As String, char As Variant
首先,您应该始终在模块的顶部包含“option explicit”,因为它迫使您正确定义变量。这是问题的根源,因为没有定义char
变量,并且代码的某些行需要一个数组,因此在该点上失败。至少,在我将char
更改为变体之前,我就是这样做的。您可能不想为char
使用变量,我建议您使用此变量研究代码行
我无法进一步帮助您,因为我不完全清楚代码的目标是什么,而且我不理解所使用的非英语单词。如果您还有更多问题,请告诉我。将工作表倒计时
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。 < P>可以考虑一次删除:
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
Dim ws As工作表
将名称变暗为字符串
对于ActiveWorkbook.Worksheets中的每个ws
如果InStr(GlobalSheetName,ws.Name)=0,那么Name=Name&ws.Name&“|”
下一个
如果名称为“”,则工作表(拆分(左(名称,左(名称)-1),“|”)。删除
我从这个开始,并将它用于我在这个项目中的其他子项目。我尝试了这个,VBE在unicode部分被搞糊涂了,正如你所说的。