我每月从一张名为";模板";并将其命名为";月-年";。这一切都很好,但它将新的工作表放在";模板";床单我希望它在工作簿的最后一张工作表之后添加新的工作表。我把它改成了Shhet计数,但出现了一个错误。你能帮忙吗?这是我的密码。
Sub CopySheet()
Dim MySheetName As String
'MySheetName = ActiveCell.Text
'OR
MySheetName = InputBox("Enter a Sheet Name!")
'check a value has been entered
If MySheetName = "" Then
MsgBox "No sheet name was entered, ending!"
Exit Sub
Else
'================================================
'Check there are no invalid sheet name characters
'================================================
If ValidSheetName(MySheetName) Then
Sheets.Add.Name = "Template"
Worksheets("Template").Move After:=Worksheets(Worksheets.Count)
Else
MsgBox "There is an invalid character in the sheet name!"
End If
End If
End Sub
Function ValidSheetName(ByVal sheetName As String) As Boolean
'========================================
'check a sheetname for invalid characters
'========================================
Dim arrInvalid As Variant
Dim i As Long
arrInvalid = Array("/", "", "[", "]", "*", "?", ":")
For i = LBound(arrInvalid) To UBound(arrInvalid)
If InStr(1, sheetName, arrInvalid(i), vbTextCompare) Then
ValidSheetName = False
Exit Function
End If
Next
ValidSheetName = True
End Function
您可以通过指定新添加的工作表的位置
ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(<index>)
其中CCD_ 1是从1到张数的数字。
这一张在工作簿末尾添加了一张新表:
ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
您可以考虑使用外部模板文件从预格式化/预填充的模板(.xltx(添加新工作表:
ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count), Type:=<full spec of template file>
模板文件只能包含一张图纸。
图纸添加会隐式激活图纸,因此您可以在使用添加后对其进行命名
Activesheet.Name="something"
为了检查输入的工作表名称的有效性,您可以简单地让Excel完成其工作,同时为等异常做好准备
On Error Resume Next
Activesheet.Name = MySheetName
If Err.Number = 1004 Then ' invalid name (wrong char, existing sheetname, zero length name, whatever)
MsgBox "Invalid or existing sheet name!
Else
Err.Raise Err.Number ' other error
End If
On Error Goto 0
注:
- 虽然语法正确,但有时我很难从模板中添加新工作表并在一个命令中重命名它,这就是为什么我建议分两步单独完成:首先添加,然后重命名
- 请注意
On Error
子句,它们非常有用,但使用错误时很容易误导您