For the saveas issue try:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim vSaveAs, sInfo1(1 To 2), sInfo2(1 To 2)
    On Error GoTo ErrHandler
    
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    
    Select Case MsgBox("Want to save your change to '" & Me.Name & "' to a file?", vbYesNoCancel + vbExclamation, "Microsoft Excel")
        Case vbCancel
            Cancel = True
            GoTo ErrHandler
        Case vbNo
            Cancel = True
            ActiveWorkbook.Close False
        Case vbYes
            sInfo1(1) = Me.Name
            sInfo1(2) = Me.Path
            vSaveAs = Application.Dialogs(xlDialogSaveAs).Show(arg1:=Me.Name)
            Select Case vSaveAs
                Case False
                    Cancel = True
                Case Else
                    sInfo2(1) = ActiveWorkbook.Name
                    sInfo2(2) = ActiveWorkbook.Path
                    ActiveWorkbook.SaveAs Filename:=vSaveAs
                    ActiveWorkbook.Close False
            End Select
    End Select
    Err.Clear
ErrHandler:
    With Err
        If .Number <> 0 Then
            MsgBox "Nr.: " & .Number & vbLf & .Description
        End If
    End With
    Application.DisplayAlerts = True
    Application.EnableEvents = True
End Sub
For the other one: I don't see a possibility to tell the excel application to check the file location of a file you double clicked to open and set readOnly appropriately in VBA. Maybe somebody else has an idea?