Solved

How to edit the macro code to limit the number of characters when creating worksheet tab name

Posted on 2016-10-12
5
48 Views
Last Modified: 2016-10-16
Hi, on a previous Experts-Exchange (https://www.experts-exchange.com/questions/28972223/How-to-do-this-in-Microsoft-Excel.html) we got a great solution to create the attached file.

On a few of the worksheets tab names though that get automatically created, it was saying "Sheet1", "Sheet 2", etc. We realize that it was because there is a 31 character limit for worksheet tab names and the code didn't account for this. Our bad since we didn't realize that.

Anyways, we're looking to alter the code we received in the previous post and that's in the attached file so it limits the tab names to the first 31 characters so that Excel doesn't receive an error and put ex. "Sheet 1" instead.
VBA_Excel_-Test_FileQ28972223-Rev-1.xlsm
0
Comment
Question by:sagardeo
  • 2
  • 2
5 Comments
 
LVL 46

Accepted Solution

by:
Martin Liss earned 500 total points
ID: 41841191
Change

ws.Name = Mid(cel.Value, 17)

to

ws.Name = Left(Mid(cel.Value, 17), 31)
0
 

Author Closing Comment

by:sagardeo
ID: 41841323
thank you
0
 
LVL 46

Expert Comment

by:Martin Liss
ID: 41841335
You're welcome and I'm glad I was able to help.

If you expand the “Full Biography” section of my profile you'll find links to some articles I've written that may interest you.

Marty - Microsoft MVP 2009 to 2016
              Experts Exchange MVE 2015
              Experts Exchange Top Expert Visual Basic Classic 2012 to 2015
0
 
LVL 18

Expert Comment

by:Roy_Cox
ID: 41841390
This example code includes a Function that tests for any bad sheet names - characters, length, etc.
Option Explicit
Sub Copy_Rename()
     ' Copy_Rename Macro
    Dim strName As String, strSht As String
     '======Test if sheet exists usinfg Function and name is correct format
         strName = Range("C4").Value
    If Not BadName(strName) Then
'    On Error Resume Next
    If Not WksExists(strName) Then
        strSht = ActiveSheet.Name
       Sheets.Add After:=Sheets(Sheets.Count)
       ActiveSheet.Name = strName
        Sheets(strSht).Range("A:M").Copy Sheets(strName).Range("A1")
    Sheets(strSht).Range("C4:D9, F4:L5, F7:L7, I9:L9, B11:H36, B39:L49").ClearContents
     Else: MsgBox "The number you have entered has already been used." & vbNewLine & "This data will not be saved."
     Exit Sub
     End If
     Else: MsgBox "The name for the sheet is not in the correct format" & vbNewLine & "This data will not be saved."
     End If
End Sub

Function WksExists(wksName As String) As Boolean
    On Error Resume Next
    WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function
Function BadName(s As String) As Boolean
    BadName = False
    Dim iBadCharsCount As Integer
    iBadCharsCount = InStr(1, s, ":") + InStr(1, s, "\") + InStr(1, s, "/") + _
                     InStr(1, s, "?") + InStr(1, s, "*") + InStr(1, s, "[") + InStr(1, s, "]")
    
    If iBadCharsCount > 0 Or Len(s) > 31 Then
        BadName = True
    End If
End Function

Open in new window

0
 

Author Comment

by:sagardeo
ID: 41845629
thx Roy will try that as well!
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Over the years I have built up my own little library of code snippets that I refer to when programming or writing a script.  Many of these have come from the web or adaptations from snippets I find on the Web.  Periodically I add to them when I come…
Freeze panes is an option within all variants of Excel to enable parts of a sheet to remain stationary when the cursor is in another part of the sheet. This is a very useful feature which is overlooked or under used.
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

785 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question