使用输入框添加新工作表,检查现有工作表名称和无效工作表名称

时间:2015-01-10 15:06:55

标签: excel vba excel-vba

我是VBA的新手,但我需要用它做点什么。我想创建一个输入框,添加一个具有特定名称的新工作表。不知何故,我可以通过一些搜索论坛后做到这一点。这是我想要做的步骤,但我不能完全完成它。

  • 制作输入框,询问新工作表的名称(已完成)。
  • 当工作表的名称已经可用时,会出现一个msg框 它不能制作新的工作表,但是当相反的情况发生时,则a 制作新表(也已完成)。
  • 最后一个是我想在输入框空白时创建一个新的msg框 出现并要求输入不同的名称(我不能这样做)。

这是我目前使用的代码

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

任何帮助将不胜感激,提前感谢您的关注。啊,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:3)

检查此代码是否对您有所帮助:

为您添加其他部分主要如果您检查的条件如果工作表名称不是空白

此外,如果您想在空白输入框中退出子程序,也可以取消注释我的行退出子

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 :(得分:3)

此代码可以解决以下错误:

  1. 工作表名称已存在
  2. 工作表名称无效(空(即“”),太长或无效字符)
  3. 代码更新,因此工作表名称的长度有效,然后在创建工作表之前由Valid characters for Excel sheet names Regexp进行验证

    如果1或2为真,则会再次提示用户(再次尝试再次尝试消息)

    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
    

    测试有效的工作表名称

    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