Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
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.Works heets.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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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" wrote in message ... 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.Works heets.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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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" wrote in message ... 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.Works heets.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
Posted to microsoft.public.excel.programming
|
|||
|
|||
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" wrote in message ... 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" wrote in message ... 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.Works heets.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 |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Merge 3 Xls worksheets updates into master xls | Charts and Charting in Excel | |||
Merge cells from all worksheets into a master worksheet | Excel Discussion (Misc queries) | |||
Merge Shared Workbooks into a Master Workbook | Excel Discussion (Misc queries) | |||
Merge cells to master sheet | Excel Discussion (Misc queries) | |||
merge 3 workbooks (and all coniciding worksheets) into 1 master wb | Excel Discussion (Misc queries) |