1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| Option Explicit
Dim WithEvents AppExcel As Excel.Application 'atention, déclaré avec withevent
Dim WbExcel As Excel.Workbook
Dim WsExcel As Excel.Worksheet
Dim ExcelOnLine As Boolean 'flag à true si excel etait déjà ouvert
'quand on a ouvert le fichier
Dim ExcelClosable As Boolean 'flag mis à false tant que l'on a pas décidé
'qu'excel pouvait être fermé
Private Sub AppExcel_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean)
'evenement declenché par l'objet Excel.Application
'à chaque fermeture de workbook
'note : si plusieurs feuilles sont fermées par la fermeture d'excel
' un seul refus empeche sa fermeture
If Wb Is WbExcel Then
'il s'agit de la fermeture de notre feuille
If ExcelClosable Then
'on a autorisé la fermeture d'excel, donc on ne fait rien
Else
'on refuse la fermeture du workbook
Cancel = True
End If
End If
End Sub
Private Sub cmdOpenFile_Click()
On Error Resume Next
'on va essayer de retrouver une occurence de appExcel
'si excell n'est pas lancé, on aura une erreur que
'l'on va trapper
Set AppExcel = GetObject(, "Excel.Application")
If Err Then
'excel n'est pas démarrer
'on le démarre
Set AppExcel = CreateObject("Excel.Application")
ExcelOnLine = False
Else
'excel est démarré
ExcelOnLine = True
End If
AppExcel.Application.Visible = True
AppExcel.Application.Interactive = True
'ouverture du workbook
Set WbExcel = AppExcel.Workbooks.Open(txtFileName.Text)
'et on refuse la fermeture d'excel
ExcelClosable = False
Set WsExcel = WbExcel.Worksheets(1)
WsExcel.Unprotect
End Sub
Private Sub cmdWriteCell_Click()
'un exemple d'ecriture dans la feuille
WsExcel.Cells(1, 1) = "AAA"
End Sub
Private Sub cmdCloseFile_Click()
'on ferme notre fichier
'donc excel doit pouvoir être fermé
ExcelClosable = True
WbExcel.Close False 'sans enreister pour ce simple test
If ExcelOnLine Then
'si excell etait lancé au démarrage
'on n'a rien à faire
Else
'si on a lancé excel
'on vérifie s'il reste de workbooks ouverte
If AppExcel.Workbooks.Count = 0 Then
'plus de workbooks, on ferme excel
AppExcel.Quit
End If
End If
'un peu de ménage
Set WsExcel = Nothing
Set WbExcel = Nothing
Set AppExcel = Nothing
End Sub
Private Sub Form_Load()
OpenFile1.InitDir = App.Path
End Sub |