From: Ron de Bruin on
Hi Ozzie

Delete the two lines in the macro i posted

'Do stuff on the second sheet
SecondSh.Range("A1").Value = "place code here to do what you want"

Then after the do the paste part I add my code (the pivot must use that data so we must paste the data first)
I not add all your code, but test this first to see if it is working
See that I not hardcode the ranges in this example

'Copy/paste the visible data to the new workbook
My_Range.SpecialCells(xlCellTypeVisible).Copy
With WSNew.Range("A1")
' Paste:=8 will copy the columnwidth in Excel 2000 and higher
' Remove this line if you use Excel 97
.PasteSpecial Paste:=8
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
.Select
End With

'Do stuff on the second sheet
SecondSh.Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
WSNew.UsedRange, Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:=SecondSh.Range("A1"), TableName:="PivotTable3", DefaultVersion _
:=xlPivotTableVersion10



--

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


"Ozzie via OfficeKB.com" <u18021(a)uwe> wrote in message news:a25bff213377a(a)uwe...
> Ron de Bruin wrote:
>>Ok try this changed macro from the example workbook that add a extra sheet
>>
>>Where it say
>>
>> 'Do stuff on the second sheet
>> SecondSh.Range("A1").Value = "place code here to do what you want"
>>
>>Add code to do what you want on that sheet
>>
>>The best thing is to record a macro when you do the steps manual.
>>Then you have the basic code that you can add to the macro
>>
>>Sub Copy_To_Workbooks()
>
>
> Ron,
>
> I have created the additional code to place on the 'second sheet' however it
> keeps failing and I can't see why, any ideas?
>
> 'Do stuff on the second sheet
> 'SecondSh.Range("A1").Value
> Sheets("MySecondSheet").Select
> Range("A1").Select
> ActiveSheet.PivotCaches.Add(SourceType:=xlDatabase,
> SourceData:= _
> "sheet1!R1C1:R405C8").CreatePivotTable TableDestination:= _
> "'[Cleaning - Repair.xls]MySecondSheet'!R6C2", TableName:
> ="PivotTable3", _
> DefaultVersion:=xlPivotTableVersion10
> ActiveSheet.PivotTables("PivotTable3").AddFields RowFields:
> ="Material", _
> ColumnFields:="Scanner Move"
> With ActiveSheet.PivotTables("PivotTable3").PivotFields("PUK")
> .Orientation = xlDataField
> .Caption = "Count of PUK"
> .Function = xlCount
> .NumberFormat = "#,##0"
> End With
> Range("B2").Select
> ActiveCell.FormulaR1C1 = "Report Heading"
> Range("A6").Select
> ActiveWindow.FreezePanes = True
>
>
>>'Note: This macro use the function LastRow
>> Dim My_Range As Range
>> Dim FieldNum As Long
>> Dim FileExtStr As String
>> Dim FileFormatNum As Long
>> Dim CalcMode As Long
>> Dim ViewMode As Long
>> Dim ws2 As Worksheet
>> Dim MyPath As String
>> Dim foldername As String
>> Dim Lrow As Long
>> Dim cell As Range
>> Dim CCount As Long
>> Dim WSNew As Worksheet
>> Dim ErrNum As Long
>> Dim SecondSh As Worksheet
>>
>> 'Set filter range on ActiveSheet: A11 is the top left cell of your filter range
>> 'and the header of the first column, D is the last column in the filter range.
>> 'You can also add the sheet name to the code like this :
>> 'Worksheets("Sheet1").Range("A11:D" & LastRow(Worksheets("Sheet1")))
>> 'No need that the sheet is active then when you run the macro when you use this.
>> Set My_Range = Range("A11:D" & LastRow(ActiveSheet))
>> My_Range.Parent.Select
>>
>> If ActiveWorkbook.ProtectStructure = True Or _
>> My_Range.Parent.ProtectContents = True Then
>> MsgBox "Sorry, not working when the workbook or worksheet is protected", _
>> vbOKOnly, "Copy to new workbook"
>> Exit Sub
>> End If
>>
>> 'This example filters on the first column in the range(change the field if needed)
>> 'In this case the range starts in A so Field:=1 is column A, 2 = column B, ......
>> FieldNum = 1
>>
>> 'Turn off AutoFilter
>> My_Range.Parent.AutoFilterMode = False
>>
>> 'Set the file extension/format
>> If Val(Application.Version) < 12 Then
>> 'You use Excel 97-2003
>> FileExtStr = ".xls": FileFormatNum = -4143
>> Else
>> 'You use Excel 2007
>> If ActiveWorkbook.FileFormat = 56 Then
>> FileExtStr = ".xls": FileFormatNum = 56
>> Else
>> FileExtStr = ".xlsx": FileFormatNum = 51
>> End If
>> End If
>>
>> 'Change ScreenUpdating, Calculation, EnableEvents, ....
>> With Application
>> CalcMode = .Calculation
>> .Calculation = xlCalculationManual
>> .ScreenUpdating = False
>> .EnableEvents = False
>> End With
>> ViewMode = ActiveWindow.View
>> ActiveWindow.View = xlNormalView
>> ActiveSheet.DisplayPageBreaks = False
>>
>> 'Delete the sheet RDBLogSheet if it exists
>> On Error Resume Next
>> Application.DisplayAlerts = False
>> Sheets("RDBLogSheet").Delete
>> Application.DisplayAlerts = True
>> On Error GoTo 0
>>
>> ' Add worksheet to copy/Paste the unique list
>> Set ws2 = Worksheets.Add(After:=Sheets(Sheets.Count))
>> ws2.Name = "RDBLogSheet"
>>
>> 'Fill in the path\folder where you want the new folder with the files
>> 'you can use also this "C:\Users\Ron\test"
>> MyPath = Application.DefaultFilePath
>>
>> 'Add a slash at the end if the user forget it
>> If Right(MyPath, 1) <> "\" Then
>> MyPath = MyPath & "\"
>> End If
>>
>> 'Create folder for the new files
>> foldername = MyPath & Format(Now, "yyyy-mm-dd hh-mm-ss") & "\"
>> MkDir foldername
>>
>> With ws2
>> 'first we copy the Unique data from the filter field to ws2
>> My_Range.Columns(FieldNum).AdvancedFilter _
>> Action:=xlFilterCopy, _
>> CopyToRange:=.Range("A3"), Unique:=True
>>
>> 'loop through the unique list in ws2 and filter/copy to a new sheet
>> Lrow = .Cells(Rows.Count, "A").End(xlUp).Row
>> For Each cell In .Range("A4:A" & Lrow)
>>
>> 'Filter the range
>> My_Range.AutoFilter Field:=FieldNum, Criteria1:="=" & _
>> Replace(Replace(Replace(cell.Value, "~", "~~"), "*", "~*"), "?", "~?")
>>
>> 'Check if there are no more then 8192 areas(limit of areas)
>> CCount = 0
>> On Error Resume Next
>> CCount = My_Range.Columns(1).SpecialCells(xlCellTypeVisible) _
>> .Areas(1).Cells.Count
>> On Error GoTo 0
>> If CCount = 0 Then
>> MsgBox "There are more than 8192 areas for the value : " & cell.Value _
>> & vbNewLine & "It is not possible to copy the visible data." _
>> & vbNewLine & "Tip: Sort your data before you use this macro.", _
>> vbOKOnly, "Split in worksheets"
>> Else
>> 'Add new workbook with one sheet
>> Set WSNew = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
>> Set SecondSh = Worksheets.Add
>> SecondSh.Name = "MySecondSheet"
>> WSNew.Activate
>>
>> 'Do stuff on the second sheet
>> SecondSh.Range("A1").Value = "place code here to do what you want"
>>
>> 'Copy/paste the visible data to the new workbook
>> My_Range.SpecialCells(xlCellTypeVisible).Copy
>> With WSNew.Range("A1")
>> ' Paste:=8 will copy the columnwidth in Excel 2000 and higher
>> ' Remove this line if you use Excel 97
>> .PasteSpecial Paste:=8
>> .PasteSpecial xlPasteValues
>> .PasteSpecial xlPasteFormats
>> Application.CutCopyMode = False
>> .Select
>> End With
>>
>> 'Save the file in the new folder and close it
>> On Error Resume Next
>> WSNew.Parent.SaveAs foldername & _
>> cell.Value & FileExtStr, FileFormatNum
>> If Err.Number > 0 Then
>> Err.Clear
>> ErrNum = ErrNum + 1
>>
>> WSNew.Parent.SaveAs foldername & _
>> "Error_" & Format(ErrNum, "0000") & FileExtStr, FileFormatNum
>>
>> .Cells(cell.Row, "B").Formula = "=Hyperlink(""" & foldername & _
>> "Error_" & Format(ErrNum, "0000") & FileExtStr & """)"
>>
>> .Cells(cell.Row, "A").Interior.Color = vbRed
>> Else
>> .Cells(cell.Row, "B").Formula = _
>> "=Hyperlink(""" & foldername & cell.Value & FileExtStr & """)"
>> End If
>>
>> WSNew.Parent.Close False
>> On Error GoTo 0
>> End If
>>
>> 'Show all the data in the range
>> My_Range.AutoFilter Field:=FieldNum
>>
>> Next cell
>> .Cells(1, "A").Value = "Red cell: can't use the Unique name as file name"
>> .Cells(1, "B").Value = "Created Files (Click on the link to open a file)"
>> .Cells(3, "A").Value = "Unique Values"
>> .Cells(3, "B").Value = "Full Path and File name"
>> .Cells(3, "A").Font.Bold = True
>> .Cells(3, "B").Font.Bold = True
>> .Columns("A:B").AutoFit
>>
>> End With
>>
>> 'Turn off AutoFilter
>> My_Range.Parent.AutoFilterMode = False
>>
>> If ErrNum > 0 Then
>> MsgBox "Rename every WorkSheet name that start with ""Error_"" manually" _
>> & vbNewLine & "There are characters in the name that are not allowed" _
>> & vbNewLine & "in a sheet name or the worksheet already exist."
>> End If
>>
>> 'Restore ScreenUpdating, Calculation, EnableEvents, ....
>> My_Range.Parent.Select
>> ActiveWindow.View = ViewMode
>> ws2.Select
>> With Application
>> .ScreenUpdating = True
>> .EnableEvents = True
>> .Calculation = CalcMode
>> End With
>>
>>End Sub
>>
>>> Hi Ozzie
>>>
>>[quoted text clipped - 17 lines]
>>>>
>>>> Many thanks
>
> --
> Message posted via OfficeKB.com
> http://www.officekb.com/Uwe/Forums.aspx/excel-programming/201001/1
>

From: Ozzie via OfficeKB.com on
Ron de Bruin wrote:
>Hi Ozzie
>
>Delete the two lines in the macro i posted
>
> 'Do stuff on the second sheet
> SecondSh.Range("A1").Value = "place code here to do what you want"
>
>Then after the do the paste part I add my code (the pivot must use that data so we must paste the data first)
>I not add all your code, but test this first to see if it is working
>See that I not hardcode the ranges in this example
>
> 'Copy/paste the visible data to the new workbook
> My_Range.SpecialCells(xlCellTypeVisible).Copy
> With WSNew.Range("A1")
> ' Paste:=8 will copy the columnwidth in Excel 2000 and higher
> ' Remove this line if you use Excel 97
> .PasteSpecial Paste:=8
> .PasteSpecial xlPasteValues
> .PasteSpecial xlPasteFormats
> Application.CutCopyMode = False
> .Select
> End With
>
> 'Do stuff on the second sheet
> SecondSh.Select
> ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
> WSNew.UsedRange, Version:=xlPivotTableVersion10).CreatePivotTable _
> TableDestination:=SecondSh.Range("A1"), TableName:="PivotTable3", DefaultVersion _
> :=xlPivotTableVersion10
>
>>>Ok try this changed macro from the example workbook that add a extra sheet
>>>
>[quoted text clipped - 237 lines]
>>>>>
>>>>> Many thanks

Ron,

Yes the code, copy, works fine but fails when it gets to the following;

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,
SourceData:= _
WSNew.UsedRange, Version:=xlPivotTableVersion10).
CreatePivotTable _
TableDestination:=SecondSh.Range("A1"), TableName:
="PivotTable3", DefaultVersion _
:=xlPivotTableVersion10

it just doesn't like the creating of the pivot

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

From: Ron de Bruin on
This is working in 2003

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
WSNew.UsedRange).CreatePivotTable TableDestination:= _
SecondSh.Range("A1"), TableName:="PivotTable2", DefaultVersion:= _
xlPivotTableVersion10


--

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


"Ozzie via OfficeKB.com" <u18021(a)uwe> wrote in message news:a25caaaf8be3d(a)uwe...
> Ron de Bruin wrote:
>>Hi Ozzie
>>
>>Delete the two lines in the macro i posted
>>
>> 'Do stuff on the second sheet
>> SecondSh.Range("A1").Value = "place code here to do what you want"
>>
>>Then after the do the paste part I add my code (the pivot must use that data so we must paste the data first)
>>I not add all your code, but test this first to see if it is working
>>See that I not hardcode the ranges in this example
>>
>> 'Copy/paste the visible data to the new workbook
>> My_Range.SpecialCells(xlCellTypeVisible).Copy
>> With WSNew.Range("A1")
>> ' Paste:=8 will copy the columnwidth in Excel 2000 and higher
>> ' Remove this line if you use Excel 97
>> .PasteSpecial Paste:=8
>> .PasteSpecial xlPasteValues
>> .PasteSpecial xlPasteFormats
>> Application.CutCopyMode = False
>> .Select
>> End With
>>
>> 'Do stuff on the second sheet
>> SecondSh.Select
>> ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
>> WSNew.UsedRange, Version:=xlPivotTableVersion10).CreatePivotTable _
>> TableDestination:=SecondSh.Range("A1"), TableName:="PivotTable3", DefaultVersion
>> _
>>
>> :=xlPivotTableVersion10
>>
>>>>Ok try this changed macro from the example workbook that add a extra sheet
>>>>
>>[quoted text clipped - 237 lines]
>>>>>>
>>>>>> Many thanks
>
> Ron,
>
> Yes the code, copy, works fine but fails when it gets to the following;
>
> ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,
> SourceData:= _
> WSNew.UsedRange, Version:=xlPivotTableVersion10).
> CreatePivotTable _
> TableDestination:=SecondSh.Range("A1"), TableName:
> ="PivotTable3", DefaultVersion _
> :=xlPivotTableVersion10
>
> it just doesn't like the creating of the pivot
>
> --
> Message posted via http://www.officekb.com
>

From: Ozzie via OfficeKB.com on
Ron de Bruin wrote:
>This is working in 2003
>
> ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
> WSNew.UsedRange).CreatePivotTable TableDestination:= _
> SecondSh.Range("A1"), TableName:="PivotTable2", DefaultVersion:= _
> xlPivotTableVersion10
>
>>>Hi Ozzie
>>>
>[quoted text clipped - 47 lines]
>>
>> it just doesn't like the creating of the pivot


Ron, Thank you very much, it all works very, very well, really appreciated

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

From: Ron de Bruin on
You are welcome

Seems the recorder in 2007 is not working correct
Time that I play more with this stuff (if I have time)



--

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


"Ozzie via OfficeKB.com" <u18021(a)uwe> wrote in message news:a25d2285da8ed(a)uwe...
> Ron de Bruin wrote:
>>This is working in 2003
>>
>> ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
>> WSNew.UsedRange).CreatePivotTable TableDestination:= _
>> SecondSh.Range("A1"), TableName:="PivotTable2", DefaultVersion:= _
>> xlPivotTableVersion10
>>
>>>>Hi Ozzie
>>>>
>>[quoted text clipped - 47 lines]
>>>
>>> it just doesn't like the creating of the pivot
>
>
> Ron, Thank you very much, it all works very, very well, really appreciated
>
> --
> Message posted via http://www.officekb.com
>
First  |  Prev  | 
Pages: 1 2 3 4
Prev: Large footnote
Next: Updating Excel QueryTable using VB