Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I need this macro to be a little more robust. It works but only up to
26. Could it be the computer I'm on? If I change the range in the patient's sheet to only c1:c26 this macro works without a hitch. If I add any more rows it crashes. i need it to copy all the sheets and get this done. It is rather urgent. Can I use an array instead of a loop. Any ideas? many thanks, Dim lngLastRow As Long Dim ws As Worksheet Dim wb As Workbook Dim c As Range Dim rng As Range Dim sStr As String, Lname As String Dim inputDate As Date Set wb = ThisWorkbook Set ws = wb.Worksheets("patients") Set ws = ThisWorkbook.Worksheets("patients") 'lngLastRow = Cells(Rows.Count, "c").End(xlUp).Row ' lngLastRow = ws.Cells.Find(What:="*", After:=ws.Range("C1"), _ SearchDirection:=xlPrevious).Row lngLastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Debug.Print lngLastRow Set rng = ws.Range("C1:C" & lngLastRow) inputDate = InputBox("Enter a date:", "Date", Date) For Each c In rng.Cells wb.Sheets(2).Copy befo=wb.Sheets(2) Set ws = wb.Sheets(2) ws.Range("T5") = inputDate sStr = c Lname = Mid(sStr, InStr(1, sStr, " ") + 1) ws.Name = Lname Next c End Sub |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
This problem actually occurs on most any computer that I've used. The
problem is the worksheet.copy command. There are a couple workarounds: 1. Create a blank sheet, then use copy/paste (special) to recreate the copied sheet. 2. Create a template of the sheet to be copied, and insert a new sheet based on the template. The second is better, because it makes a complete copy. - Jon ------- Jon Peltier, Microsoft Excel MVP Tutorials and Custom Solutions Peltier Technical Services, Inc. - http://PeltierTech.com _______ "papou" wrote in message ... Hello Janis Cannot be too definite but it looks like it is the computer your are working on: it has probably reached the maximum available memory ressource and cannot go on. HTH Cordially Pascal "Janis R" a écrit dans le message de news: ... I need this macro to be a little more robust. It works but only up to 26. Could it be the computer I'm on? If I change the range in the patient's sheet to only c1:c26 this macro works without a hitch. If I add any more rows it crashes. i need it to copy all the sheets and get this done. It is rather urgent. Can I use an array instead of a loop. Any ideas? many thanks, Dim lngLastRow As Long Dim ws As Worksheet Dim wb As Workbook Dim c As Range Dim rng As Range Dim sStr As String, Lname As String Dim inputDate As Date Set wb = ThisWorkbook Set ws = wb.Worksheets("patients") Set ws = ThisWorkbook.Worksheets("patients") 'lngLastRow = Cells(Rows.Count, "c").End(xlUp).Row ' lngLastRow = ws.Cells.Find(What:="*", After:=ws.Range("C1"), _ SearchDirection:=xlPrevious).Row lngLastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Debug.Print lngLastRow Set rng = ws.Range("C1:C" & lngLastRow) inputDate = InputBox("Enter a date:", "Date", Date) For Each c In rng.Cells wb.Sheets(2).Copy befo=wb.Sheets(2) Set ws = wb.Sheets(2) ws.Range("T5") = inputDate sStr = c Lname = Mid(sStr, InStr(1, sStr, " ") + 1) ws.Name = Lname Next c End Sub |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hello Jon
Thanks for that, so its definitely not a memory issue. Is the error always occuring above 26 copies ? Cordially Pascal "Jon Peltier" a écrit dans le message de news: ... This problem actually occurs on most any computer that I've used. The problem is the worksheet.copy command. There are a couple workarounds: 1. Create a blank sheet, then use copy/paste (special) to recreate the copied sheet. 2. Create a template of the sheet to be copied, and insert a new sheet based on the template. The second is better, because it makes a complete copy. - Jon ------- Jon Peltier, Microsoft Excel MVP Tutorials and Custom Solutions Peltier Technical Services, Inc. - http://PeltierTech.com _______ "papou" wrote in message ... Hello Janis Cannot be too definite but it looks like it is the computer your are working on: it has probably reached the maximum available memory ressource and cannot go on. HTH Cordially Pascal "Janis R" a écrit dans le message de news: ... I need this macro to be a little more robust. It works but only up to 26. Could it be the computer I'm on? If I change the range in the patient's sheet to only c1:c26 this macro works without a hitch. If I add any more rows it crashes. i need it to copy all the sheets and get this done. It is rather urgent. Can I use an array instead of a loop. Any ideas? many thanks, Dim lngLastRow As Long Dim ws As Worksheet Dim wb As Workbook Dim c As Range Dim rng As Range Dim sStr As String, Lname As String Dim inputDate As Date Set wb = ThisWorkbook Set ws = wb.Worksheets("patients") Set ws = ThisWorkbook.Worksheets("patients") 'lngLastRow = Cells(Rows.Count, "c").End(xlUp).Row ' lngLastRow = ws.Cells.Find(What:="*", After:=ws.Range("C1"), _ SearchDirection:=xlPrevious).Row lngLastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Debug.Print lngLastRow Set rng = ws.Range("C1:C" & lngLastRow) inputDate = InputBox("Enter a date:", "Date", Date) For Each c In rng.Cells wb.Sheets(2).Copy befo=wb.Sheets(2) Set ws = wb.Sheets(2) ws.Range("T5") = inputDate sStr = c Lname = Mid(sStr, InStr(1, sStr, " ") + 1) ws.Name = Lname Next c End Sub |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Depends on the sheet. ISTR numbers like 29 or 39. Microsoft has actually
issued a KB article with a workaround, which goes like this: if you get the error, save and close the workbook, reopen it, and continue. - Jon ------- Jon Peltier, Microsoft Excel MVP Tutorials and Custom Solutions Peltier Technical Services, Inc. - http://PeltierTech.com _______ "papou" wrote in message ... Hello Jon Thanks for that, so its definitely not a memory issue. Is the error always occuring above 26 copies ? Cordially Pascal "Jon Peltier" a écrit dans le message de news: ... This problem actually occurs on most any computer that I've used. The problem is the worksheet.copy command. There are a couple workarounds: 1. Create a blank sheet, then use copy/paste (special) to recreate the copied sheet. 2. Create a template of the sheet to be copied, and insert a new sheet based on the template. The second is better, because it makes a complete copy. - Jon ------- Jon Peltier, Microsoft Excel MVP Tutorials and Custom Solutions Peltier Technical Services, Inc. - http://PeltierTech.com _______ "papou" wrote in message ... Hello Janis Cannot be too definite but it looks like it is the computer your are working on: it has probably reached the maximum available memory ressource and cannot go on. HTH Cordially Pascal "Janis R" a écrit dans le message de news: ... I need this macro to be a little more robust. It works but only up to 26. Could it be the computer I'm on? If I change the range in the patient's sheet to only c1:c26 this macro works without a hitch. If I add any more rows it crashes. i need it to copy all the sheets and get this done. It is rather urgent. Can I use an array instead of a loop. Any ideas? many thanks, Dim lngLastRow As Long Dim ws As Worksheet Dim wb As Workbook Dim c As Range Dim rng As Range Dim sStr As String, Lname As String Dim inputDate As Date Set wb = ThisWorkbook Set ws = wb.Worksheets("patients") Set ws = ThisWorkbook.Worksheets("patients") 'lngLastRow = Cells(Rows.Count, "c").End(xlUp).Row ' lngLastRow = ws.Cells.Find(What:="*", After:=ws.Range("C1"), _ SearchDirection:=xlPrevious).Row lngLastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Debug.Print lngLastRow Set rng = ws.Range("C1:C" & lngLastRow) inputDate = InputBox("Enter a date:", "Date", Date) For Each c In rng.Cells wb.Sheets(2).Copy befo=wb.Sheets(2) Set ws = wb.Sheets(2) ws.Range("T5") = inputDate sStr = c Lname = Mid(sStr, InStr(1, sStr, " ") + 1) ws.Name = Lname Next c End Sub |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Jan 22, 10:10 am, "Jon Peltier"
wrote: This problem actually occurs on most any computer that I've used. The problem is the worksheet.copy command. There are a couple workarounds: 1. Create a blank sheet, then use copy/paste (special) to recreate the copied sheet. 2. Create a template of the sheet to be copied, and insert a new sheet based on the template. The second is better, because it makes a complete copy. - Jon ------- Jon Peltier, Microsoft Excel MVP Tutorials and Custom Solutions Peltier Technical Services, Inc. -http://PeltierTech.com _______ "papou" wrote in message ... Hello Janis Cannot be too definite but it looks like it is the computer your are working on: it has probably reached the maximum available memory ressource and cannot go on. HTH Cordially Pascal "Janis R" a écrit dans le message de news: ... I need this macro to be a little more robust. It works but only up to 26. Could it be the computer I'm on? If I change the range in the patient's sheet to only c1:c26 this macro works without a hitch. If I add any more rows it crashes. i need it to copy all the sheets and get this done. It is rather urgent. Can I use an array instead of a loop. Any ideas? many thanks, Dim lngLastRow As Long Dim ws As Worksheet Dim wb As Workbook Dim c As Range Dim rng As Range Dim sStr As String, Lname As String Dim inputDate As Date Set wb = ThisWorkbook Set ws = wb.Worksheets("patients") Set ws = ThisWorkbook.Worksheets("patients") 'lngLastRow = Cells(Rows.Count, "c").End(xlUp).Row ' lngLastRow = ws.Cells.Find(What:="*", After:=ws.Range("C1"), _ SearchDirection:=xlPrevious).Row lngLastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Debug.Print lngLastRow Set rng = ws.Range("C1:C" & lngLastRow) inputDate = InputBox("Enter a date:", "Date", Date) For Each c In rng.Cells wb.Sheets(2).Copy befo=wb.Sheets(2) Set ws = wb.Sheets(2) ws.Range("T5") = inputDate sStr = c Lname = Mid(sStr, InStr(1, sStr, " ") + 1) ws.Name = Lname Next c End Sub Sometimes an Excel workbook bloats to a huge file size when multiple sheets are copied to it. Especially if the target workbook is a master and refilled repeatedly. I've had relatively compact workbooks sheetwise engorge to 10MB from this. And that obviously becomes an opportunity for memory dysfunction. When this happens, the file size will not decrease even if you delete most of the worksheets. The only work arounds I've found are to copy the cell contents and then paste as values into the target workbook that has a template sheet pre- formatted. The other is to copy the target sheets to a new workbook in order the leave the bloat behind. So check your target workbook size too for this possibility. Perhaps Jon or somebody else here has more info on this phenomenon. SteveM |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
auto creating an idex sheet when adding formatted sheets | Excel Discussion (Misc queries) | |||
creating multiple sheets, then individualized workbooks for each sheet | Excel Discussion (Misc queries) | |||
protect all sheets macro crashes when sheet is hidden | Excel Programming | |||
Q: Creating a macro to sort and group columns in a sheet according to another sheet | Excel Programming | |||
creating a master sheet that totals values from other sheets | Excel Programming |