From: Ozzie via OfficeKB.com on
Hi, any help with the following would be really appreciated,

I have some VB Code, which works well, that for each change in a value in
column A creates a new sheet. However what I now need to do is to either;

a) create a new workbook for each of the newly created workshets, or
b) instead of creating a new sheet to directly create a workbook,

the ultimate end goal is to automatically email these workbooks or sheets.

my code for creating a new worksheet is

Sub create_new_sheets()
Dim CalcMode As Long
Dim ws1 As Worksheet
Dim WSNew As Worksheet
Dim rng As Range
Dim cell As Range
Dim lrow As Long

Set ws1 = Sheets("Sheet1")
Set rng = ws1.Range("A1:z10000").CurrentRegion

With Application
CalcMode = .Calculation
.Calculation = xlCalculationAutomatic
.ScreenUpdating = False
End With

With ws1
rng.Columns(1).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.Range("IV1"), Unique:=True
lrow = .Cells(Rows.Count, "IV").End(xlUp).Row
.Range("IU1").Value = .Range("IV1").Value

For Each cell In .Range("IV2:IV" & lrow)
.Range("IU2").Value = cell.Value
Set WSNew = Sheets.Add
On Error Resume Next
WSNew.Name = cell.Value
If Err.Number > 0 Then
MsgBox "Change the name of : " & WSNew.Name & " manually"
Err.Clear
End If
On Error GoTo 0
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("IU1:IU2"), _
CopyToRange:=WSNew.Range("A1"), _
Unique:=False

Cells.Select
With Selection
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1").Select

WSNew.Columns.AutoFit
WSNew.Range("A1:A6").EntireRow.Insert
WSNew.Range("A7:C8").Copy WSNew.Range("D3")
WSNew.Columns("A:C").Delete
WSNew.Columns("A").AutoFit

End Sub

Many thanks

--
Message posted via http://www.officekb.com

From: Ron de Bruin on
Try this example
http://www.rondebruin.nl/copy5_3.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


"Ozzie via OfficeKB.com" <u18021(a)uwe> wrote in message news:a250009bc86a2(a)uwe...
> Hi, any help with the following would be really appreciated,
>
> I have some VB Code, which works well, that for each change in a value in
> column A creates a new sheet. However what I now need to do is to either;
>
> a) create a new workbook for each of the newly created workshets, or
> b) instead of creating a new sheet to directly create a workbook,
>
> the ultimate end goal is to automatically email these workbooks or sheets.
>
> my code for creating a new worksheet is
>
> Sub create_new_sheets()
> Dim CalcMode As Long
> Dim ws1 As Worksheet
> Dim WSNew As Worksheet
> Dim rng As Range
> Dim cell As Range
> Dim lrow As Long
>
> Set ws1 = Sheets("Sheet1")
> Set rng = ws1.Range("A1:z10000").CurrentRegion
>
> With Application
> CalcMode = .Calculation
> .Calculation = xlCalculationAutomatic
> .ScreenUpdating = False
> End With
>
> With ws1
> rng.Columns(1).AdvancedFilter _
> Action:=xlFilterCopy, _
> CopyToRange:=.Range("IV1"), Unique:=True
> lrow = .Cells(Rows.Count, "IV").End(xlUp).Row
> .Range("IU1").Value = .Range("IV1").Value
>
> For Each cell In .Range("IV2:IV" & lrow)
> .Range("IU2").Value = cell.Value
> Set WSNew = Sheets.Add
> On Error Resume Next
> WSNew.Name = cell.Value
> If Err.Number > 0 Then
> MsgBox "Change the name of : " & WSNew.Name & " manually"
> Err.Clear
> End If
> On Error GoTo 0
> rng.AdvancedFilter Action:=xlFilterCopy, _
> CriteriaRange:=.Range("IU1:IU2"), _
> CopyToRange:=WSNew.Range("A1"), _
> Unique:=False
>
> Cells.Select
> With Selection
> .VerticalAlignment = xlBottom
> .WrapText = False
> .Orientation = 0
> .AddIndent = False
> .ShrinkToFit = False
> .ReadingOrder = xlContext
> .MergeCells = False
> End With
> Range("A1").Select
>
> WSNew.Columns.AutoFit
> WSNew.Range("A1:A6").EntireRow.Insert
> WSNew.Range("A7:C8").Copy WSNew.Range("D3")
> WSNew.Columns("A:C").Delete
> WSNew.Columns("A").AutoFit
>
> End Sub
>
> Many thanks
>
> --
> Message posted via http://www.officekb.com
>
From: Ron de Bruin on
Oops I missed that
>> the ultimate end goal is to automatically email these workbooks or sheets.


If you want to mail it directly see
http://www.rondebruin.nl/mail/folder2/row2.htm

Or if you use Outlook
http://www.rondebruin.nl/mail/folder2/row2.htm

Or body
http://www.rondebruin.nl/mail/folder3/row2.htm




--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


"Ron de Bruin" <rondebruin(a)kabelfoon.nl> wrote in message news:OVCUtYImKHA.5020(a)TK2MSFTNGP02.phx.gbl...
> Try this example
> http://www.rondebruin.nl/copy5_3.htm
>
> --
>
> Regards Ron de Bruin
> http://www.rondebruin.nl/tips.htm
>
>
> "Ozzie via OfficeKB.com" <u18021(a)uwe> wrote in message news:a250009bc86a2(a)uwe...
>> Hi, any help with the following would be really appreciated,
>>
>> I have some VB Code, which works well, that for each change in a value in
>> column A creates a new sheet. However what I now need to do is to either;
>>
>> a) create a new workbook for each of the newly created workshets, or
>> b) instead of creating a new sheet to directly create a workbook,
>>
>> the ultimate end goal is to automatically email these workbooks or sheets.
>>
>> my code for creating a new worksheet is
>>
>> Sub create_new_sheets()
>> Dim CalcMode As Long
>> Dim ws1 As Worksheet
>> Dim WSNew As Worksheet
>> Dim rng As Range
>> Dim cell As Range
>> Dim lrow As Long
>>
>> Set ws1 = Sheets("Sheet1")
>> Set rng = ws1.Range("A1:z10000").CurrentRegion
>>
>> With Application
>> CalcMode = .Calculation
>> .Calculation = xlCalculationAutomatic
>> .ScreenUpdating = False
>> End With
>>
>> With ws1
>> rng.Columns(1).AdvancedFilter _
>> Action:=xlFilterCopy, _
>> CopyToRange:=.Range("IV1"), Unique:=True
>> lrow = .Cells(Rows.Count, "IV").End(xlUp).Row
>> .Range("IU1").Value = .Range("IV1").Value
>>
>> For Each cell In .Range("IV2:IV" & lrow)
>> .Range("IU2").Value = cell.Value
>> Set WSNew = Sheets.Add
>> On Error Resume Next
>> WSNew.Name = cell.Value
>> If Err.Number > 0 Then
>> MsgBox "Change the name of : " & WSNew.Name & " manually"
>> Err.Clear
>> End If
>> On Error GoTo 0
>> rng.AdvancedFilter Action:=xlFilterCopy, _
>> CriteriaRange:=.Range("IU1:IU2"), _
>> CopyToRange:=WSNew.Range("A1"), _
>> Unique:=False
>>
>> Cells.Select
>> With Selection
>> .VerticalAlignment = xlBottom
>> .WrapText = False
>> .Orientation = 0
>> .AddIndent = False
>> .ShrinkToFit = False
>> .ReadingOrder = xlContext
>> .MergeCells = False
>> End With
>> Range("A1").Select
>>
>> WSNew.Columns.AutoFit
>> WSNew.Range("A1:A6").EntireRow.Insert
>> WSNew.Range("A7:C8").Copy WSNew.Range("D3")
>> WSNew.Columns("A:C").Delete
>> WSNew.Columns("A").AutoFit
>>
>> End Sub
>>
>> Many thanks
>>
>> --
>> Message posted via http://www.officekb.com
>>
From: Gord Dibben on
Since you have already created the sheets you can run this macro to save
each sheet as its own workbook.

Sub Make_New_Books()
Dim w As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each w In ActiveWorkbook.Worksheets
w.Copy
With ActiveWorkbook
.SaveAs FileName:=ThisWorkbook.Path _
& "\" & w.Name & ".xlsx"
.Close
End With
Next w
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Or see Ron de Bruin's site for code to create new workbooks directly from
unique values.

http://www.rondebruin.nl/copy5.htm


Gord Dibben MS Excel MVP

On Mon, 18 Jan 2010 21:33:14 GMT, "Ozzie via OfficeKB.com" <u18021(a)uwe>
wrote:

>Hi, any help with the following would be really appreciated,
>
>I have some VB Code, which works well, that for each change in a value in
>column A creates a new sheet. However what I now need to do is to either;
>
>a) create a new workbook for each of the newly created workshets, or
>b) instead of creating a new sheet to directly create a workbook,
>
>the ultimate end goal is to automatically email these workbooks or sheets.
>
>my code for creating a new worksheet is
>
>Sub create_new_sheets()
> Dim CalcMode As Long
> Dim ws1 As Worksheet
> Dim WSNew As Worksheet
> Dim rng As Range
> Dim cell As Range
> Dim lrow As Long
>
> Set ws1 = Sheets("Sheet1")
> Set rng = ws1.Range("A1:z10000").CurrentRegion
>
> With Application
> CalcMode = .Calculation
> .Calculation = xlCalculationAutomatic
> .ScreenUpdating = False
> End With
>
> With ws1
> rng.Columns(1).AdvancedFilter _
> Action:=xlFilterCopy, _
> CopyToRange:=.Range("IV1"), Unique:=True
> lrow = .Cells(Rows.Count, "IV").End(xlUp).Row
> .Range("IU1").Value = .Range("IV1").Value
>
> For Each cell In .Range("IV2:IV" & lrow)
> .Range("IU2").Value = cell.Value
> Set WSNew = Sheets.Add
> On Error Resume Next
> WSNew.Name = cell.Value
> If Err.Number > 0 Then
> MsgBox "Change the name of : " & WSNew.Name & " manually"
> Err.Clear
> End If
> On Error GoTo 0
> rng.AdvancedFilter Action:=xlFilterCopy, _
> CriteriaRange:=.Range("IU1:IU2"), _
> CopyToRange:=WSNew.Range("A1"), _
> Unique:=False
>
> Cells.Select
> With Selection
> .VerticalAlignment = xlBottom
> .WrapText = False
> .Orientation = 0
> .AddIndent = False
> .ShrinkToFit = False
> .ReadingOrder = xlContext
> .MergeCells = False
> End With
> Range("A1").Select
>
> WSNew.Columns.AutoFit
> WSNew.Range("A1:A6").EntireRow.Insert
> WSNew.Range("A7:C8").Copy WSNew.Range("D3")
> WSNew.Columns("A:C").Delete
> WSNew.Columns("A").AutoFit
>
>End Sub
>
>Many thanks

From: Ozzie via OfficeKB.com on
Ron de Bruin wrote:
>Try this example
>http://www.rondebruin.nl/copy5_3.htm
>
>> Hi, any help with the following would be really appreciated,
>>
>[quoted text clipped - 68 lines]
>>
>> Many thanks

Many thanks for all responses,

Ron,

Many thanks for your speedy response, the example spreadsheet with the code
that saves the workbooks into a folder and then creates a hyperlink is really
'spot on' and is something I hadn't considered. This is really efficient and
gets me around any company email limits!,

Thanks alot

--
Message posted via http://www.officekb.com

 |  Next  |  Last
Pages: 1 2 3 4
Prev: Large footnote
Next: Updating Excel QueryTable using VB