Consulting

Results 1 to 5 of 5

Thread: sh.Name

  1. #1

    sh.Name

    Hi, I'm trying to add the following bit to my code:

    [VBA]sh.Name = "Page"[/VBA]

    I want to loop so that each time I create a new Worksheet it is given the name "Page #" until the end but I am stuck. Thank you.

  2. #2
    VBAX Master
    Joined
    Jul 2006
    Location
    Belgium
    Posts
    1,286
    Location
    Maybe try this one :
    [VBA]Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Dim lastsheet As Worksheet
    Dim mysheetno As Long
    mysheetno = 0
    Set lastsheet = Sh
    For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 4) = "Page" Then
    If Split(Sh.Name, "#")(1) > mysheetno Then
    mysheetno = Val(Split(Sh.Name, "#")(1))
    End If
    End If
    Next Sh
    mysheetno = mysheetno + 1
    lastsheet.Name = "Page # " & Str(mysheetno)
    End Sub[/VBA]
    Charlize

  3. #3
    Quote Originally Posted by Charlize
    Maybe try this one :
    [vba]Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Dim lastsheet As Worksheet
    Dim mysheetno As Long
    mysheetno = 0
    Set lastsheet = Sh
    For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 4) = "Page" Then
    If Split(Sh.Name, "#")(1) > mysheetno Then
    mysheetno = Val(Split(Sh.Name, "#")(1))
    End If
    End If
    Next Sh
    mysheetno = mysheetno + 1
    lastsheet.Name = "Page # " & Str(mysheetno)
    End Sub[/vba] Charlize
    Thanks Charlize, I have provided my code to show you what it is I'm trying to do:

    [VBA]Public Sub CreateInvoices()
    Const TEST_COLUMN As String = "A"
    Dim i As Long
    Dim z As Long
    Dim LastRow As Long
    Dim sh As Worksheet

    With ActiveSheet

    LastRow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row
    For i = 3 To LastRow Step 41

    Set sh = .Parent.Worksheets.Add(after:=.Parent.Worksheets(.Parent.Worksheets.Count))
    sh.Name = "Page" (z)
    .Rows(i).Resize(38).Copy sh.Range("A1")
    Next i
    End With

    End Sub[/VBA]

  4. #4
    Administrator
    VP-Knowledge Base
    VBAX Grand Master mdmackillop's Avatar
    Joined
    May 2004
    Location
    Scotland
    Posts
    14,489
    Location
    You're not far away. This assumes your original page is not Page 1

    [VBA]
    Option Explicit
    Public Sub CreateInvoices()
    Const TEST_COLUMN As String = "A"
    Dim i As Long
    Dim z As Long
    Dim LastRow As Long
    Dim sh As Worksheet

    With ActiveSheet
    LastRow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row
    For i = 3 To LastRow Step 41
    Set sh = .Parent.Worksheets.Add(after:=.Parent.Worksheets(.Parent.Worksheets.Count))
    z = z + 1
    sh.Name = "Page " & z
    .Rows(i).Resize(38).Copy sh.Range("A1")
    Next i
    End With
    End Sub

    [/VBA]
    MVP (Excel 2008-2010)

    Post a workbook with sample data and layout if you want a quicker solution.


    To help indent your macros try Smart Indent

    Please remember to mark threads 'Solved'

  5. #5
    Thanks very much mdmackillop. That's exactly what I needed.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •