+ Reply to Thread
Results 1 to 4 of 4

Overwrite Master sheet when using merge macro

  1. #1
    Mark Jackson
    Guest

    Overwrite Master sheet when using merge macro

    Hello,

    Is it possible to tweak the macro that I am currently using to
    overwrite the master worksheet without deleting it every time? Right now it
    says, "There is a worksheet called as 'Master'." I need to delete the master
    worksheet in order to merge the worksheets again.

    Here is the macro:


    Sub CopyFromWorksheets()
    Dim wrk As Workbook 'Workbook object - Always good to work with object
    variables
    Dim sht As Worksheet 'Object for handling worksheets in loop
    Dim trg As Worksheet 'Master Worksheet
    Dim rng As Range 'Range object
    Dim colCount As Integer 'Column count in tables in the worksheets

    Set wrk = ActiveWorkbook 'Working in active workbook

    For Each sht In wrk.Worksheets
    If sht.Name = "Master" Then
    MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
    "Please remove or rename this worksheet since 'Master' would be"
    & _
    "the name of the result worksheet of this process.", vbOKOnly +
    vbExclamation, "Error"
    Exit Sub
    End If
    Next sht

    'We don't want screen updating
    Application.ScreenUpdating = False

    'Add new worksheet as the last worksheet
    Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
    'Rename the new worksheet
    trg.Name = "Master"
    'Get column headers from the first worksheet
    'Column count first
    Set sht = wrk.Worksheets(1)
    colCount = sht.Cells(1, 255).End(xlToLeft).Column
    'Now retrieve headers, no copy&paste needed
    With trg.Cells(1, 1).Resize(1, colCount)
    .Value = sht.Cells(1, 1).Resize(1, colCount).Value
    'Set font as bold
    .Font.Bold = True
    End With

    'We can start loop
    For Each sht In wrk.Worksheets
    'If worksheet in loop is the last one, stop execution (it is Master
    worksheet)
    If sht.Index = wrk.Worksheets.Count Then
    Exit For
    End If
    'Data range in worksheet - starts from second row as first rows are
    the header rows in all worksheets
    Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536,
    1).End(xlUp).Resize(, colCount))
    'Put data into the Master worksheet
    trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count,
    rng.Columns.Count).Value = rng.Value
    Next sht
    'Fit the columns in Master worksheet
    trg.Columns.AutoFit

    'Screen updating should be activated
    Application.ScreenUpdating = True
    End Sub

    Thanks in advance.

    Mark

  2. #2
    John
    Guest

    Re: Overwrite Master sheet when using merge macro

    Hi Mark,

    Assuming that there's nothing particularly you want to keep on the old
    Master sheet, the easiest way would be to replace the first If Then
    statement form this:

    If sht.Name = "Master" Then
    MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
    "Please remove or rename this worksheet since 'Master' would be"
    & _
    "the name of the result worksheet of this process.", vbOKOnly +
    vbExclamation, "Error"
    Exit Sub
    End If

    To this:

    If sht.Name = "Master" Then
    sht.Delete
    End If

    This will just delete the "Master" sheet if it exists and then carry on with
    the rest of the procedure.

    If I've assumed incorrectly, let me know and I'll try an alternative. Also
    if you do want to keep data on the original master sheet then we'd need to
    know what and where it is.

    Anyway, hope this helps

    Best regards

    John


    "Mark Jackson" <[email protected]> wrote in message
    news:[email protected]...
    > Hello,
    >
    > Is it possible to tweak the macro that I am currently using to
    > overwrite the master worksheet without deleting it every time? Right now
    > it
    > says, "There is a worksheet called as 'Master'." I need to delete the
    > master
    > worksheet in order to merge the worksheets again.
    >
    > Here is the macro:
    >
    >
    > Sub CopyFromWorksheets()
    > Dim wrk As Workbook 'Workbook object - Always good to work with object
    > variables
    > Dim sht As Worksheet 'Object for handling worksheets in loop
    > Dim trg As Worksheet 'Master Worksheet
    > Dim rng As Range 'Range object
    > Dim colCount As Integer 'Column count in tables in the worksheets
    >
    > Set wrk = ActiveWorkbook 'Working in active workbook
    >
    > For Each sht In wrk.Worksheets
    > If sht.Name = "Master" Then
    > MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
    > "Please remove or rename this worksheet since 'Master' would
    > be"
    > & _
    > "the name of the result worksheet of this process.", vbOKOnly +
    > vbExclamation, "Error"
    > Exit Sub
    > End If
    > Next sht
    >
    > 'We don't want screen updating
    > Application.ScreenUpdating = False
    >
    > 'Add new worksheet as the last worksheet
    > Set trg =
    > wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
    > 'Rename the new worksheet
    > trg.Name = "Master"
    > 'Get column headers from the first worksheet
    > 'Column count first
    > Set sht = wrk.Worksheets(1)
    > colCount = sht.Cells(1, 255).End(xlToLeft).Column
    > 'Now retrieve headers, no copy&paste needed
    > With trg.Cells(1, 1).Resize(1, colCount)
    > .Value = sht.Cells(1, 1).Resize(1, colCount).Value
    > 'Set font as bold
    > .Font.Bold = True
    > End With
    >
    > 'We can start loop
    > For Each sht In wrk.Worksheets
    > 'If worksheet in loop is the last one, stop execution (it is
    > Master
    > worksheet)
    > If sht.Index = wrk.Worksheets.Count Then
    > Exit For
    > End If
    > 'Data range in worksheet - starts from second row as first rows
    > are
    > the header rows in all worksheets
    > Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536,
    > 1).End(xlUp).Resize(, colCount))
    > 'Put data into the Master worksheet
    > trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count,
    > rng.Columns.Count).Value = rng.Value
    > Next sht
    > 'Fit the columns in Master worksheet
    > trg.Columns.AutoFit
    >
    > 'Screen updating should be activated
    > Application.ScreenUpdating = True
    > End Sub
    >
    > Thanks in advance.
    >
    > Mark




  3. #3
    Mark Jackson
    Guest

    Re: Overwrite Master sheet when using merge macro

    Hi John,

    It works perfect. Thank you. One more question. I noticed that this macro
    will not delete the master sheet when the workbook is in share mode. Is
    there a way to delete the master sheet when the workbook is in share mode?
    Thanks again for your help.

    Sincerely,

    Mark

    "John" wrote:

    > Hi Mark,
    >
    > Assuming that there's nothing particularly you want to keep on the old
    > Master sheet, the easiest way would be to replace the first If Then
    > statement form this:
    >
    > If sht.Name = "Master" Then
    > MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
    > "Please remove or rename this worksheet since 'Master' would be"
    > & _
    > "the name of the result worksheet of this process.", vbOKOnly +
    > vbExclamation, "Error"
    > Exit Sub
    > End If
    >
    > To this:
    >
    > If sht.Name = "Master" Then
    > sht.Delete
    > End If
    >
    > This will just delete the "Master" sheet if it exists and then carry on with
    > the rest of the procedure.
    >
    > If I've assumed incorrectly, let me know and I'll try an alternative. Also
    > if you do want to keep data on the original master sheet then we'd need to
    > know what and where it is.
    >
    > Anyway, hope this helps
    >
    > Best regards
    >
    > John
    >
    >
    > "Mark Jackson" <[email protected]> wrote in message
    > news:[email protected]...
    > > Hello,
    > >
    > > Is it possible to tweak the macro that I am currently using to
    > > overwrite the master worksheet without deleting it every time? Right now
    > > it
    > > says, "There is a worksheet called as 'Master'." I need to delete the
    > > master
    > > worksheet in order to merge the worksheets again.
    > >
    > > Here is the macro:
    > >
    > >
    > > Sub CopyFromWorksheets()
    > > Dim wrk As Workbook 'Workbook object - Always good to work with object
    > > variables
    > > Dim sht As Worksheet 'Object for handling worksheets in loop
    > > Dim trg As Worksheet 'Master Worksheet
    > > Dim rng As Range 'Range object
    > > Dim colCount As Integer 'Column count in tables in the worksheets
    > >
    > > Set wrk = ActiveWorkbook 'Working in active workbook
    > >
    > > For Each sht In wrk.Worksheets
    > > If sht.Name = "Master" Then
    > > MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
    > > "Please remove or rename this worksheet since 'Master' would
    > > be"
    > > & _
    > > "the name of the result worksheet of this process.", vbOKOnly +
    > > vbExclamation, "Error"
    > > Exit Sub
    > > End If
    > > Next sht
    > >
    > > 'We don't want screen updating
    > > Application.ScreenUpdating = False
    > >
    > > 'Add new worksheet as the last worksheet
    > > Set trg =
    > > wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
    > > 'Rename the new worksheet
    > > trg.Name = "Master"
    > > 'Get column headers from the first worksheet
    > > 'Column count first
    > > Set sht = wrk.Worksheets(1)
    > > colCount = sht.Cells(1, 255).End(xlToLeft).Column
    > > 'Now retrieve headers, no copy&paste needed
    > > With trg.Cells(1, 1).Resize(1, colCount)
    > > .Value = sht.Cells(1, 1).Resize(1, colCount).Value
    > > 'Set font as bold
    > > .Font.Bold = True
    > > End With
    > >
    > > 'We can start loop
    > > For Each sht In wrk.Worksheets
    > > 'If worksheet in loop is the last one, stop execution (it is
    > > Master
    > > worksheet)
    > > If sht.Index = wrk.Worksheets.Count Then
    > > Exit For
    > > End If
    > > 'Data range in worksheet - starts from second row as first rows
    > > are
    > > the header rows in all worksheets
    > > Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536,
    > > 1).End(xlUp).Resize(, colCount))
    > > 'Put data into the Master worksheet
    > > trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count,
    > > rng.Columns.Count).Value = rng.Value
    > > Next sht
    > > 'Fit the columns in Master worksheet
    > > trg.Columns.AutoFit
    > >
    > > 'Screen updating should be activated
    > > Application.ScreenUpdating = True
    > > End Sub
    > >
    > > Thanks in advance.
    > >
    > > Mark

    >
    >
    >


  4. #4
    John
    Guest

    Re: Overwrite Master sheet when using merge macro

    Hi Mark,

    I'm afraid I haven't really dealt with shared workbooks so you might want to
    ask this question as a new post.

    Anyway, glad the to help with the first part.

    Best regards

    John

    "Mark Jackson" <[email protected]> wrote in message
    news:[email protected]...
    > Hi John,
    >
    > It works perfect. Thank you. One more question. I noticed that this
    > macro
    > will not delete the master sheet when the workbook is in share mode. Is
    > there a way to delete the master sheet when the workbook is in share mode?
    > Thanks again for your help.
    >
    > Sincerely,
    >
    > Mark
    >
    > "John" wrote:
    >
    >> Hi Mark,
    >>
    >> Assuming that there's nothing particularly you want to keep on the old
    >> Master sheet, the easiest way would be to replace the first If Then
    >> statement form this:
    >>
    >> If sht.Name = "Master" Then
    >> MsgBox "There is a worksheet called as 'Master'." & vbCrLf &
    >> _
    >> "Please remove or rename this worksheet since 'Master' would
    >> be"
    >> & _
    >> "the name of the result worksheet of this process.", vbOKOnly
    >> +
    >> vbExclamation, "Error"
    >> Exit Sub
    >> End If
    >>
    >> To this:
    >>
    >> If sht.Name = "Master" Then
    >> sht.Delete
    >> End If
    >>
    >> This will just delete the "Master" sheet if it exists and then carry on
    >> with
    >> the rest of the procedure.
    >>
    >> If I've assumed incorrectly, let me know and I'll try an alternative.
    >> Also
    >> if you do want to keep data on the original master sheet then we'd need
    >> to
    >> know what and where it is.
    >>
    >> Anyway, hope this helps
    >>
    >> Best regards
    >>
    >> John
    >>
    >>
    >> "Mark Jackson" <[email protected]> wrote in message
    >> news:[email protected]...
    >> > Hello,
    >> >
    >> > Is it possible to tweak the macro that I am currently using to
    >> > overwrite the master worksheet without deleting it every time? Right
    >> > now
    >> > it
    >> > says, "There is a worksheet called as 'Master'." I need to delete the
    >> > master
    >> > worksheet in order to merge the worksheets again.
    >> >
    >> > Here is the macro:
    >> >
    >> >
    >> > Sub CopyFromWorksheets()
    >> > Dim wrk As Workbook 'Workbook object - Always good to work with
    >> > object
    >> > variables
    >> > Dim sht As Worksheet 'Object for handling worksheets in loop
    >> > Dim trg As Worksheet 'Master Worksheet
    >> > Dim rng As Range 'Range object
    >> > Dim colCount As Integer 'Column count in tables in the worksheets
    >> >
    >> > Set wrk = ActiveWorkbook 'Working in active workbook
    >> >
    >> > For Each sht In wrk.Worksheets
    >> > If sht.Name = "Master" Then
    >> > MsgBox "There is a worksheet called as 'Master'." & vbCrLf &
    >> > _
    >> > "Please remove or rename this worksheet since 'Master' would
    >> > be"
    >> > & _
    >> > "the name of the result worksheet of this process.",
    >> > vbOKOnly +
    >> > vbExclamation, "Error"
    >> > Exit Sub
    >> > End If
    >> > Next sht
    >> >
    >> > 'We don't want screen updating
    >> > Application.ScreenUpdating = False
    >> >
    >> > 'Add new worksheet as the last worksheet
    >> > Set trg =
    >> > wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
    >> > 'Rename the new worksheet
    >> > trg.Name = "Master"
    >> > 'Get column headers from the first worksheet
    >> > 'Column count first
    >> > Set sht = wrk.Worksheets(1)
    >> > colCount = sht.Cells(1, 255).End(xlToLeft).Column
    >> > 'Now retrieve headers, no copy&paste needed
    >> > With trg.Cells(1, 1).Resize(1, colCount)
    >> > .Value = sht.Cells(1, 1).Resize(1, colCount).Value
    >> > 'Set font as bold
    >> > .Font.Bold = True
    >> > End With
    >> >
    >> > 'We can start loop
    >> > For Each sht In wrk.Worksheets
    >> > 'If worksheet in loop is the last one, stop execution (it is
    >> > Master
    >> > worksheet)
    >> > If sht.Index = wrk.Worksheets.Count Then
    >> > Exit For
    >> > End If
    >> > 'Data range in worksheet - starts from second row as first rows
    >> > are
    >> > the header rows in all worksheets
    >> > Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536,
    >> > 1).End(xlUp).Resize(, colCount))
    >> > 'Put data into the Master worksheet
    >> > trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count,
    >> > rng.Columns.Count).Value = rng.Value
    >> > Next sht
    >> > 'Fit the columns in Master worksheet
    >> > trg.Columns.AutoFit
    >> >
    >> > 'Screen updating should be activated
    >> > Application.ScreenUpdating = True
    >> > End Sub
    >> >
    >> > Thanks in advance.
    >> >
    >> > Mark

    >>
    >>
    >>




+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

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

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1