Workbook deja ouvert ?

J

jb

Guest
Salut,

J'ai besoin de savoir avec VB si un workbook est déjà ouvert ou pas, mais je ne connais pas la fonction qui permet de le savoir.
Si quelqu'un la connait, merci de me la donner.

A+

JB
 
S

STéphane

Guest
bonjour

déjà ouvert dans ton application ou sur le réseau ?

pour le premier cas, un exemple parmi d'autres du constructeur de <www.xakte.de>

Public Function IsWorkbookOpen(tWkb As String, _
Optional tPath As String = vbNullString) As Boolean
Dim wkb As Workbook

On Error Resume Next
Set wkb = Workbooks(tWkb)
If wkb Is Nothing Then
On Error GoTo PROC_ERR
If Len(tPath) Then
tPath = IIf(Right(tPath, 1) = "\", tPath, tPath & "\")
Set wkb = Workbooks.Open(tPath & tWkb)
End If
IsWorkbookOpen = True
End If

PROC_EXIT:
Exit Function
PROC_ERR:
IsWorkbookOpen = False
Resume PROC_EXIT
End Function


second cas
Frage:
Wie kann ich feststellen ob eine Excelmappe bereits
in einer anderen Excel Instanz (Netzwerk) geöffnet
ist?

Antwort:

Die Funktion IsFileInUse liefert True zurück sofern
die Datei bereits geöffnet ist.

Aufruf Beispiel:

...
If IsFileInUse("C:\Temp\Mappe1.xls") = TRUE Then
Call MsgBox("Mappe bereits geöffnet!", vbCritical)
End If
...
'------------------------------------------------------------
Function IsFileInUse(tFileName As String) As Boolean
On Error Resume Next

Dim hFile As Long

hFile = FreeFile()

Open tFileName For Random Access Read Lock Read Write As #hFile
IsFileInUse = Err.Number <> 0
Close #hFile

End Function
'------------------------------------------------------------
'EndOfCode

bye
Stéphane
 
J

jb

Guest
Merci beaucoup Steph, tu m'as bien aidé. J'avoue que j'ai pas tout compris à l'exemple que tu m'as envoyé, mais j'ai essayé de garder que ce dont j'avais vraiment besoin et ça marche (mon pb était le premier cas de figure dans ta réponse).

Encore merci et A+

JB
 
S

STéphane

Guest
Public Function IsWorkbookOpen(tWkb As String, _
Optional tPath As String = vbNullString) As Boolean
'=> déclaration de la fonction IsWorkbookOpen qui requiert qu'on lui passe un paramètre obligatoire et un paramètre optionnel.

Dim wkb As Workbook
'=> déclaration d'une variable objet de type workbook

On Error Resume Next
'=> indiquer à excel le comportement à suivre

Set wkb = Workbooks(tWkb)
'=> en utlisant la variable tWkb, qui contient le nom du classeur à contrôler, on tente l'affectation de la variable objet

'=> si le classeur n'est pas présent, la gestion d'erreur va permettre de continuer l'exécution de la macro

'=> si le classeur n'existe pas, la variable wkb ne contiendra rien du tout
'=> si elle ne contient rien du tout, le fichier n'est pas ouvert, il va être ouvert par la macro

If wkb Is Nothing Then

'=> gestion d'erreur supplémentaire
On Error GoTo PROC_ERR

If Len(tPath) Then
tPath = IIf(Right(tPath, 1) = "\", tPath, tPath & "\")
Set wkb = Workbooks.Open(tPath & tWkb)
End If
IsWorkbookOpen = True
End If

PROC_EXIT:
Exit Function

=> si une erreur s'est produite le classeur n'existe pas, on retourne le résultat booléen FAUX comme résultante de la fonction
PROC_ERR:
IsWorkbookOpen = False
Resume PROC_EXIT
End Function

bye
Stéphane
 

Discussions similaires

Statistiques des forums

Discussions
312 184
Messages
2 086 007
Membres
103 088
dernier inscrit
Psodam