?
Solved

Object Variable Not Set

Posted on 2010-08-20
10
Medium Priority
?
537 Views
Last Modified: 2013-11-28
I have a form that opens a powerpoint file after selecting "Get Presentation 1" button.  Then when you're done you take a quiz and go to "Get Presentation 2" button.  ("Get Presentation 2" button opens another form).  Everything works fine up to this point.  After "Get Presentation 2" opens the vba code doesn't recognize the buttons for "First Slide", "Next Slide", etc etc.  I get the error "Object variable or With block variable not set".  The error occurs on the "mcolSlideIDs." verbiage.  I have also attached the zip access file.  Also, If there are any suggestions of a better way to ask/store questions/answers to powerpoint slides I'd love to hear them (because I think this is going to be a little slow).
Option Explicit
Option Compare Database

' Initialize variables.
Private mcolSlideIDs As Collection
Private mlngSlideIndex As Long

Private Sub SetSlide(ByVal ID As Integer)
    On Error GoTo ErrorHandler
    
    ' Open PowerPoint
    Dim strPowerPointFile As String
    Dim pptobj As PowerPoint.Application
    Set pptobj = New PowerPoint.Application
    pptobj.Visible = True
    pptobj.WindowState = ppWindowMinimized
    
'Message here to wait
    Form_frmWait.Visible = True
    
    strPowerPointFile = CurrentProject.Path & "\Forecasting2.ppt"
    
    'With strPowerPointFile.Visible = True
    '    Set mcolSlideIDs = New Collection
    '    Dim ppSlide As PowerPoint.Slide
    '    For Each ppSlide In .Slides
    '        mcolSlideIDs.Add ppSlide.SlideID
    '    Next
    '    .Close
    'End With
'*****
     ' Close PowerPoint
    pptobj.Quit
    Set pptobj = Nothing
    
    ' Make object frame visible and enable "navigation" buttons.
    insertShow.Visible = True
    pptFrame.Visible = True
    frstSlide.Enabled = True
    lastSlide.Enabled = True
    nextSlide.Enabled = True
    previousSlide.Enabled = True
    cmdForecastingQuiz1.Enabled = True
    'cmdClose.Enabled = True
    cmdForecastingPresentationPart3.Enabled = True
Form_frmWait.Visible = False

    ' Specify OLE Class, Type, SourceDoc, SourceItem and other properties.
    With pptFrame
        .Class = "Microsoft Powerpoint Slide"
        .OLETypeAllowed = acOLELinked
        .SourceDoc = strPowerPointFile
    End With
    SetSlide 1
    
    frstSlide.SetFocus
    insertShow.Enabled = False
    
    
     With strPowerPointFile.Visible = True
        Set mcolSlideIDs = New Collection
        Dim ppSlide As PowerPoint.Slide
        For Each ppSlide In .Slides
            mcolSlideIDs.Add ppSlide.SlideID
        Next
        .Close
    End With
   
    Exit Sub
'*****
    Select Case ID
    Case Is > mcolSlideIDs.Count
        MsgBox "This is the last slide."
    Case 0
        MsgBox "This is the first slide."
    Case Else
        mlngSlideIndex = ID
        With pptFrame
            .SourceItem = mcolSlideIDs(mlngSlideIndex)
            .Action = acOLECreateLink
        End With
    End Select

    Exit Sub
ErrorHandler:
    MsgBox Err.Number & " " & Err.Description
    Exit Sub
End Sub

Private Sub frstSlide_Click()
    SetSlide 1
End Sub
Private Sub lastSlide_Click()
    SetSlide mcolSlideIDs.Count
End Sub

Private Sub nextSlide_Click()
    SetSlide mlngSlideIndex + 1
End Sub

Private Sub previousSlide_Click()
    SetSlide mlngSlideIndex - 1
End Sub

Private Sub cmdForecastingQuiz2_Click()
On Error GoTo Err_cmdForecastingQuiz2_Click
    
    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "frmForecasting_Q2"
    
    Form_frmForecasting_Q2.Visible = True
          
Exit_cmdForecastingQuiz2_Click:
    Exit Sub

Err_cmdForecastingQuiz2_Click:
    MsgBox Err.Description
    Resume Exit_cmdForecastingQuiz2_Click
    
End Sub

Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click


    DoCmd.Close
    DoCmd.Close
Exit_cmdClose_Click:
    Exit Sub

Err_cmdClose_Click:
    MsgBox Err.Description
    Resume Exit_cmdClose_Click
    
End Sub
Private Sub cmdForecastingPresentationPart3_Click()
On Error GoTo Err_cmdForecastingPresentationPart3_Click
    
    Dim stDocName As String
    Dim stLinkCriteria As String
    Dim strPowerPointFile As String
    Dim pptobj As PowerPoint.Application
    
    
    stDocName = "Form_frmForecastingPresentation3"
        
    Form_frmForecastingPresentation3.Visible = True
    Form_frmForecastingPresentation2.Visible = False
    
        ' Open PowerPoint

    Set pptobj = New PowerPoint.Application
    pptobj.Visible = True
    pptobj.WindowState = ppWindowMinimized
    
'Message here to wait
    Form_frmWait.Visible = True
    
    strPowerPointFile = CurrentProject.Path & "\Forecasting3.ppt"
    
    ' Fill a collection with all Slide IDs.
    With pptobj.Presentations.Open(strPowerPointFile)
        Set mcolSlideIDs = New Collection
        Dim ppSlide As PowerPoint.Slide
        For Each ppSlide In .Slides
            mcolSlideIDs.Add ppSlide.SlideID
        Next
        .Close
    End With
    
    ' Close PowerPoint
    pptobj.Quit
    Set pptobj = Nothing

    ' Make object frame visible and enable "navigation" buttons.
    Form_frmForecastingPresentation3.pptFrame.Visible = True
    Form_frmForecastingPresentation3.frstSlide.Enabled = True
    Form_frmForecastingPresentation3.lastSlide.Enabled = True
    Form_frmForecastingPresentation3.nextSlide.Enabled = True
    Form_frmForecastingPresentation3.previousSlide.Enabled = True
    Form_frmForecastingPresentation3.cmdForecastingQ3a.Enabled = True
    'cmdClose.Enabled = True
    Form_frmForecastingPresentation3.cmdForecastingPresentationPart4.Enabled = True
Form_frmWait.Visible = False
    
    ' Specify OLE Class, Type, SourceDoc, SourceItem and other properties.
    With Form_frmForecastingPresentation3.pptFrame
        .Class = "Microsoft Powerpoint Slide"
        .OLETypeAllowed = acOLELinked
        .SourceDoc = strPowerPointFile
    End With
    SetSlide 1
    
    Form_frmForecastingPresentation3.frstSlide.SetFocus
    cmdForecastingPresentationPart3.Enabled = False
                      
Exit_cmdForecastingPresentationPart3_Click:
    Exit Sub

Err_cmdForecastingPresentationPart3_Click:
    MsgBox Err.Description
    Resume Exit_cmdForecastingPresentationPart3_Click
    
End Sub

Open in new window

Forecasting.zip
0
Comment
Question by:BCTITech
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
  • 2
10 Comments
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 33487447
from the VBA window, do a DEBUG>Compile

correct any errors raised
0
 

Author Comment

by:BCTITech
ID: 33487494
I did that..that's when I get the same message "Object variable or With block variable not set".  
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 33487805
BCTITech,
there are so many errors in the codes in the form "frmForecastingPresentation2" module.

the codes in your form "frmForecastingPresentation1" works, so just pattern the codes of form frmForecastingPresentation2 in the codes from form "frmForecastingPresentation1"


0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

Author Comment

by:BCTITech
ID: 33487987
I'll give it a try...however, form2 has a few different functions to perform than form1.  Thank you for the input.
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 33488016
<.however, form2 has a few different functions to perform than form1>

copy first the code that the function of the form are the same, test the codes.
if working properly, start adding the other functionalities
0
 
LVL 74

Expert Comment

by:Jeffrey Coachman
ID: 33488197
Basically this error means that you created an Object, but you did not SET it to anything
Ex:
Dim rst as dao.recordset
'SET rst=currentDB.openrecordset ("Sometable")


Or that you declared it, set it, ...but somewhere along the line Unset it (Set SomeObject=Nothing), then tried to use it again.

So check your code for something like this as well.

;-)

JeffCoachman

0
 

Author Comment

by:BCTITech
ID: 33488677
Thank you....I'll look it over this weekend & see if I can find out where I changed SetFocus.
0
 
LVL 74

Accepted Solution

by:
Jeffrey Coachman earned 750 total points
ID: 33488712
?
I said:
See where you may have forgotten to "SET" the object (not SetFocus)

Jeff
0
 
LVL 120

Assisted Solution

by:Rey Obrero (Capricorn1)
Rey Obrero (Capricorn1) earned 750 total points
ID: 33491532
BCTITech,
test this....
several lines of codes were revised

this does not show the error you are getting..

so you can proceed to whatever you need to add to your application..

if you have any problem not related to the error you posted, just open another thread..
eWFMTraining.mdb
0
 

Author Closing Comment

by:BCTITech
ID: 33500762
Thanks for the tips!
0

Featured Post

Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Windows Phone Theme Colours is a tight, powerful, and well balanced palette. This tiny Access application makes it a snap to select and pick a value. And it doubles as an intro to implementing WithEvents, one of Access' hidden gems.
This article shows how to get a list of available printers for display in a drop-down list, and then to use the selected printer to print an Access report or a Word document filled with Access data, using different syntax as needed for working with …
In Microsoft Access, when working with VBA, learn some techniques for writing readable and easily maintained code.
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Suggested Courses

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question