Search code examples
excelvbams-access

From MS Access VBA close encrypted excel after failed password


I'm keeping an ID for API in an encrypted excel file (open to alternative suggestions) and using Microsoft access VBA to open the encrypted excel and extract the ID.

The issue is that it will not close excel if the password is incorrect. This code works fine if you enter the password correctly

Public Function getDeploymentID() As String
Dim fileLocation As String
fileLocation = "___DeploymentID.xlsx"
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
Dim wb As Excel.Workbook

On Error GoTo getDeploymentID_ERROR
MsgBox "The development password is in a password protected excel. It will prompt you for the password next"
Set wb = Workbooks.Open(fileLocation, True)
'User must enter password to continue. If they don't it'll error out on above line
DoEvents

'Get deploymentID
getDeploymentID = wb.Worksheets("Sheet1").Cells(1, 1)

'Close it
'wb.Close               'will close workbook, won't close excel
wb.Application.Quit     'will close workbook and excel
DoEvents
GoTo getDeploymentID_Cleanup

getDeploymentID_ERROR:
Debug.Print "Failed to open DeploymentID excel file. Error " & err.Number & ":" & err.description
objExcel.Quit           'THIS IS NOT WORKING
DoEvents

getDeploymentID_Cleanup:
Set wb = Nothing
Set objExcel = Nothing
End Function

Solution

  • I believe you need to access the Workbooks collection through the objExcel.

    Set wb = objExcel.Workbooks.Open(fileLocation, True)
    

    Then,

    wb.Close 'close workbook
    objExcel.Quit 'quit excel app
    

    References:


    Regarding the structure of the function, I would add the error handling at the bottom and call Resume to avoid the 2nd GoTo statement.

    '...
    On Error GoTo getDeploymentID_ERROR
    '...
    
    'Get deploymentID
     getDeploymentID = wb.Worksheets("Sheet1").Cells(1, 1)
    
    getDeploymentID_Cleanup:
        wb.Close
        objExcel.Quit
        Exit Function
    
    getDeploymentID_ERROR:
        Debug.Print "Failed to open DeploymentID excel file. Error " & err.Number & ":" & err.description
        Resume getDeploymentID_Cleanup
    End Function