A couple modifications of Tom's routine and it worked ok for me:
Option Explicit
Sub Tester1()
Dim wk1 As Worksheet, bk2 As Workbook
Dim sh As Worksheet, cell As Range, rng As Range
Dim rng1 As Range, res As Variant
Set wk1 = Workbooks("All_data.xls").Worksheets("sheet1")
Set bk2 = Workbooks("Reports.xls")
Set rng = wk1.Range(wk1.Cells(2, 1), wk1.Cells(2, 1).End(xlDown))
For Each cell In rng
Set sh = bk2.Worksheets(cell.Offset(0, 1).Value)
Set rng1 = sh.Range(sh.Cells(2, "H"), sh.Cells(2, "H").End(xlDown))
res = Application.Match(CLng(cell.Offset(0, 7)), rng1, 0)
If IsError(res) Then
cell.EntireRow.Copy _
Destination:=rng1.Offset( _
rng1.Rows.Count, 0).Resize(1, 1).EntireRow.Cells(1)
End If
Next cell
End Sub
But you'll have to adjust the name of the worksheet that contains the names--I
used Sheet1.
Martyn wrote:
>
> Dear Tom,
> I put it in a procedure but still get the compiler error...Unfortunately I
> am almost a newbee with VBA programming. Thus I am stuck with my problem.
> Help will be appreciated.
>
> "Tom Ogilvy" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > No, you need to put it in a procedure:
> >
> > Sub Tester1()
> > Dim bk1 as workbook, bk2 as workbook
> > Dim sh as worksheet, cell as range, rng as Range
> > Dim rng1 as Range, res as Variant
> > set bk1 = Workbooks("All_data.xls")
> > set bk2 = workbooks("Reports.xls")
> > set rng = bk1.Range(bk1.Cells(2,1),bk1.Cells(2,1).End(xldown))
> > for each cell in rng
> > set sh = Bk2.Worksheets(cell.offset(0,1).value)
> > set rng1 = sh.Range(sh.cells(2,"H"),sh.Cells(2,"H").End(xldown))
> > res = Application.Match(clng(cell.offset(0,7)),rng1,0)
> > if iserror(res) then
> > cell.Entirerow.copy _
> > Destination:=rng1.offset( _
> > rng1.rows.count,0).Resize(1,1)
> > end if
> > Next
> > End Sub
> >
> > I didn't put it in a procedure because I don't want to create the
> impression
> > I bench tested it - I did not, so it may contain typos but represents an
> > approach. It is assumed you can fine tune it to meet your needs.
> >
> > --
> > Regards,
> > Tom Ogilvy
> >
> >
> >
> > "Martyn" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> > > Hi Tom,
> > > I used the code in the "Reports.xls" file with the All_data.xls file
> open
> > > but
> > > Received an Compile error "Invalid Outside Procedure" for the line
> > > Set bk1 = Workbooks("All_data.xls")
> > > Should the code reside on a seperate file?
> > >
> > >
> > > "Tom Ogilvy" <(E-Mail Removed)> wrote in message
> > > news:(E-Mail Removed)...
> > > > it should go something like this.
> > > >
> > > > Dim bk1 as workbook, bk2 as workbook
> > > > Dim sh as worksheet, cell as range, rng as Range
> > > > Dim rng1 as Range, res as Variant
> > > > set bk1 = Workbooks("All_data.xls")
> > > > set bk2 = workbooks("Reports.xls")
> > > > set rng = bk1.Range(bk1.Cells(2,1),bk1.Cells(2,1).End(xldown))
> > > > for each cell in rng
> > > > set sh = Bk2.Worksheets(cell.offset(0,1).value)
> > > > set rng1 = sh.Range(sh.cells(2,"H"),sh.Cells(2,"H").End(xldown))
> > > > res = Application.Match(clng(cell.offset(0,7)),rng1,0)
> > > > if iserror(res) then
> > > > cell.Entirerow.copy
> > > > Destination:=rng1.offset(rng1.rows.count,0).Resize(1,1)
> > > > end if
> > > > Next
> > > >
> > > >
> > > >
> > > > --
> > > > Regards,
> > > > Tom Ogilvy
> > >
> > >
> > >
> >
> >
--
Dave Peterson
(E-Mail Removed)