使用“input框”添加新工作表,检查现有工作表名称和无效工作表名称

即时通讯新的VBA,但我需要做一些事情。 我想使input框添加一个具有特定名称的新工作表。 不知何故,我可以做一些search后,通过论坛。 这里是我想要做的步骤,但我不能完全做到这一点。

  • 使input框要求新的名单(已完成)。
  • 当表单的名称已经可用时,会出现一个信息框,表示它不能创build新的表单,但是当相反的情况发生时,会创build一个新的表单(也完成了)。
  • 最后是我想让input框为空时出现一个新的信息框,并要求input不同的名称(这是我不能做的)。

这是迄今为止使用的代码

Public Sub CariSheet() Dim SheetName As String Dim shExists As Boolean Do SheetName = InputBox("Write the name of sheet", "Add Sheet") If NamaSheet <> "" Then shExists = SheetExists(SheetName) If Not shExists Then Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = SheetName MsgBox "The sheet " & (SheetName) & " is successfuly made", , "Result" Else MsgBox "The name is already exist, please enter a new name", vbOKOnly + vbInformation, "Name" End If End If Loop Until Not shExists Or SheetName = "" End Sub Private Function SheetExists(ByVal SheetName As String, _ Optional ByVal wb As Workbook) If wb Is Nothing Then Set wb = ActiveWorkbook On Error Resume Next SheetExists = Not wb.Worksheets(SheetName) Is Nothing End Function 

任何帮助将不胜感激,提前感谢您的关注。 啊,对不起我的英文不好。

检查这段代码是否可以帮助你:

为您添加了Else部分 Main如果您检查的条件如果Sheetname不为空白

另外,如果你想在空白input框的情况下退出子程序,你也可以取消注释我的行Exit Sub

 Public Sub CariSheet() Dim SheetName As String Dim shExists As Boolean Do SheetName = InputBox("Write the name of sheet", "Add Sheet") If SheetName <> "" Then shExists = SheetExists(SheetName) If Not shExists Then Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = SheetName MsgBox "The sheet " & (SheetName) & " is successfuly made", , "Result" Else MsgBox "The name is already exist, please enter a new name", vbOKOnly + vbInformation, "Name" End If Else MsgBox "Please enter a sheet name.", vbOKOnly + vbInformation, "Warning" 'Exit Sub End If Loop Until Not shExists Or SheetName = "" End Sub 

此代码可以满足以下任一错误:

  1. 工作表名称已经存在
  2. 表格名称无效(空(即“”),太长或无效的字符)

代码更新,因此工作表名称被validation的长度,然后在创build工作表之前,通过Excel工作表名称的有效字符的正则expression式

如果1或2为真,用户将被重新提示(再次尝试再次input消息)

 Public Sub CariSheet() Dim SheetName As String Dim bFinished As Boolean Dim strMsg As String Dim ws As Worksheet Do While Not bFinished SheetName = InputBox("Pls enter the name of the sheet", strMsg, "Add Sheet") On Error Resume Next Set ws = Sheets(SheetName) On Error GoTo 0 If ws Is Nothing Then Select Case Len(SheetName) Case 0 strMsg = "Sheet name is blank" Case Is > 31 strMsg = "Sheet name exceeds 31 characters" Case Else If ValidSheetName(SheetName) Then Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ws.Name = SheetName Else strMsg = "Sheet name has invalid characters" End If End Select Else strMsg = "Sheet exists" Set ws = Nothing End If Loop End Sub 

testing有效的工作表名称

 Function ValidSheetName(strIn As String) As Boolean Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") objRegex.Pattern = "[\<\>\*\\\/\?|]" ValidSheetName = Not objRegex.test(strIn) End Function