title: VBA Macro to check if sheet name exists
body: <p>I'm currently running a macro that copies a template sheet, takes user's inputs, renames the sheet, and places the user inputs in the sheet.</p>
  
  <p>Everything seems to be working except for the function that checks if the Sheet name already exists. The actual "Sheet already exists" works, however, before prompting me with this error it duplicates the TEMPLATE worksheet for some reason.</p>
  
  <p>Here's the code for the actual macro (affected area is: Sheets("TEMPLATE").Copy After:=Sheets("TEMPLATE"))</p>
  
  <pre><code>'============================================================================
  'Button to load new GSA Form
  '============================================================================
  Private Sub CommandButton1_Click()
  
  Const cstrTitle As String = "Create a new GSA worksheet"
  Const cstrPrompt As String = "Enter the GSA number for the new worksheet"
  Dim projName As String
  Dim projAddress As String
  Dim projDate As Date
  Dim strInput As Variant                                     'Input value from user (GSA Number)
  Dim strDefault As String: strDefault = ""                   'Sets default value for inputbox
  Dim strInputErrorMessage As String                          'Error message
  Dim booValidateOK As Boolean: booValidateOK = False
  On Error GoTo HandleError
  
  Do
      strInput = ActiveSheet.Range("C9").Value
      projName = ActiveSheet.Range("C6").Value
      projAddress = ActiveSheet.Range("C7").Value
      projDate = ActiveSheet.Range("C8").Value
  
      If Len(strInput) = 0 Then GoTo HandleExit
      GoSub ValidateInput
      If Not booValidateOK Then
          If vbCancel = MsgBox(strInputErrorMessage &amp; "Retry?", vbExclamation + vbOKCancel) Then GoTo HandleExit
      End If
  Loop While Not booValidateOK
  
  Sheets("TEMPLATE").Copy After:=Sheets("TEMPLATE")                          'Copy Template Sheet, places the copy after the template sheet
  ActiveSheet.Name = strInput                                                 'Renames the new sheet to the user's input
  
  ActiveSheet.Range("C5").Value = projName                                    'Inputs Project Name to new sheet
  ActiveSheet.Range("C6").Value = projAddress                                 'Inputs Project Address to new sheet
  ActiveSheet.Range("C7").Value = projDate                                    'Inputs Project Date to new sheet
  ActiveSheet.Range("C8").Value = strInput                                    'Inputs GSA # to new sheet
  
  ThisWorkbook.Worksheets("MASTER").Range("C6").Value = ""   'name'           'Deletes inputs from MASTER sheet
  ThisWorkbook.Worksheets("MASTER").Range("C7").Value = ""   'address'
  ThisWorkbook.Worksheets("MASTER").Range("C8").Value = ""   'date'
  ThisWorkbook.Worksheets("MASTER").Range("C9").Value = ""   'gsa #'
  
  
  
  HandleExit:
  Exit Sub
  HandleError:
  MsgBox Err.Description
  Resume HandleExit
  
  ValidateInput:
  If SheetExists(strSheetName:=strInput) Then
      strInputErrorMessage = "Sheet already exists. "
  Else
      booValidateOK = True
  End If
  Return
  End Sub
  </code></pre>
  
  <p>Here's the function that checks to see if the sheet already exists</p>
  
  <pre><code>Public Function SheetExists(strSheetName As Variant, Optional wbWorkbook As Workbook) As Boolean
  If wbWorkbook Is Nothing Then Set wbWorkbook = ActiveWorkbook           'or ThisWorkbook - whichever appropriate
  Dim obj As Object
  On Error GoTo HandleError
  Set obj = wbWorkbook.Sheets(strSheetName)
  SheetExists = True
  Exit Function
  HandleError:
   SheetExists = False
  End Function
  </code></pre>