Paul Hartland
paul.hartland at googlemail.com
Mon Jul 13 01:34:22 CDT 2009
Just a thought have you tried this:
ExitRoutine:
On Error Resume Next
r.Close
Set r = Nothing
oxlApp.Visible = True
Set oxlCht = Nothing
oxlWkb.Close
Set oxlWkb = Nothing
oxlApp.Quit
Set oxlApp = Nothing
Exit Sub
Paul Hartland
2009/7/13 Jurgen Welz <jwelz at hotmail.com>
>
> I've run into an Excel automation problem. It seems like one of those
> nagging failure to release an object reference problems.
>
> What happens is, the first time I run the code, it works perfectly. If I
> call the procedure a second time, it errors. If I then close the Access
> application, reopen it and then try the code again, it triggers the error.
> If I close the access application by running End and then Quit from the
> immediate window, the code again works the first time I try it after
> reopening the Access application.
>
> The code worked perfectly until I added some cleaned up Excel macro
> recorder code to the Access code that inserted a chart. If I comment out
> the chart code, the automation code runs correctly every time. The code
> uses a preformatted Excel template and writes a table of information to
> sheet 2 and then diplays a table based on that data on the first sheet.
>
> Every object that uses a set statement is set to nothing in the ExitRoutine
> portion of the error handler in the code. I can only assume there is some
> implicit instantiation of an Excel object that I'm not seeing. Excerpted
> below, skipping the part that writes the data, is the part of the code that
> blows up on the 4 th line below where the Source of chart data is set by
> calling the SetSourceData method of the Chart object variable. I tried it
> with a workbook chart object as well as the application chart object and it
> errors at the same point. I also replaces all the oxlApp.ActiveChart with:
> With oxlCht and with: With oxlapp.ActiveChart versions of the code. Same
> story every way I try it. The code works the first time and then there is
> an error message: Method 'SetSourceData' of object'_Chart' failed. By the
> way, I needed to decrease the margins in code because if I don't, a portion
> of the x axis labeling is cut off. If I insert the chart with the wider
> margins and decrease them in the code, the axis numbers are correctly
> visible. What am I missing to get this to run without forcing a code
> end/quit?
>
> Private Sub cmdCashFlowSummary_Click()
> On Error GoTo ErrorHandler
>
> Dim oxlApp As Excel.Application
> Dim oxlWkb As Excel.Workbook
> Dim oxlCht As Excel.Chart
>
> oxlApp.Sheets("Forecast").Activate
> Set oxlCht = oxlApp.Charts.Add
> oxlCht.ChartType = xlLineMarkers
> 'Need C3 to C28 but will delete SeriesCollection(1)
> oxlCht.SetSourceData Source:=Sheets("Data").Range("B3:C28"), PlotBy:= _
> xlColumns
> 'get rid of the first series that sets the scale
> oxlCht.SeriesCollection(1).Delete
> oxlCht.SeriesCollection(1).XValues = "={""Weeks""}"
> oxlCht.SeriesCollection(1).Name = _
> "=""Historical Percent Paid by Week After Invoice"""
> oxlCht.Location Where:=xlLocationAsObject, Name:="Forecast"
> oxlApp.ActiveChart.HasTitle = True
> oxlApp.ActiveChart.ChartTitle.Characters.Text = "Percent Paid by Week
> After Invoice"
> oxlApp.ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = False
> oxlApp.ActiveChart.Axes(xlValue, xlPrimary).HasTitle = False
> oxlApp.ActiveChart.Legend.Select
> oxlApp.Selection.Delete
> 'Shape object is the chart. Shapes(1) is logo
> oxlApp.ActiveSheet.Shapes(2).Top = 250
> oxlApp.ActiveSheet.Shapes(2).Left = 0
> oxlApp.ActiveSheet.Shapes(2).Width = 516
> oxlApp.ActiveChart.SeriesCollection(1).XValues = "=Data!R3C2:R28C2"
> oxlApp.Range("A1").Select
> oxlApp.ActiveSheet.PageSetup.TopMargin = oxlApp.InchesToPoints(0.5)
> oxlApp.ActiveSheet.PageSetup.BottomMargin = oxlApp.InchesToPoints(0.5)
> ExitRoutine:
> On Error Resume Next
> r.Close
> Set r = Nothing
> oxlApp.Visible = True
> Set oxlCht = Nothing
> Set oxlWkb = Nothing
> Set oxlApp = Nothing
> Exit Sub
> ErrorHandler:
> With Err
> Select Case .Number
> Case Else
> MsgBox .Number & vbCrLf & .Description, vbInformation,
> "Error - " & _
> "frmCashFlow.cmdCashFlowSummary_Click"
> End Select
> End With
> Resume 0
> Resume ExitRoutine
> End Sub
>
> Ciao
> Jürgen Welz
> Edmonton, Alberta
> jwelz at hotmail.com
> _________________________________________________________________
> Attention all humans. We are your photos. Free us.
> http://go.microsoft.com/?linkid=9666046
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
--
Paul Hartland
paul.hartland at googlemail.com