Seite 1 von 1

Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 11:54
von Max_der_Held
Hallo Forum,
ich möchte herausfinden, ob eine Exceldatei, die ich zuvor mit COMatePlusgeöffnet habe immer noch offen ist.
Wenn der Benutzer die Datei schließt soll sie automatisch neugestartet werden.

Hier ein Code in C++: [Edit] in VBA[/Edit]
Wie setze ich den zu PB um..

Code: Alles auswählen

' Beispiel: C:\MAPPE2.XLS (richtig!) öffnen 
Dim bExists As Boolean 
Dim oWorkbook As Object 

' Prüfen ob Datei bereits geöffnet ist 
bExists = False 
With Application 
  For Each oWorkbook In .Workbooks 
    If UCase$(oWorkbook.Name) = "MAPPE2.XLS" Then 
      ' Jetzt aktivieren 
      Windows(oWorkbook.Name).Activate 
      bExists = True 
      MsgBox "Die Mappe ist bereits geöffnet !" 
      Exit For 
    End If 
  Next 
End With 

' Mappe neu laden! 
If Not bExists Then 
  On Error Resume Next 
  Workbooks.Open Filename:="C:\MAPPE2.XLS", ReadOnly:=False 
  On Error GoTo 0 
End If 
Versuch:

Code: Alles auswählen

exc = EXC_ExcelObject\GetIntegerProperty ( "Workbooks\Item( 'exceldatei.xlsx' )" ) 
Debug exc
scheint nicht zu gehen.. Vielleicht gehts ja auch komplett anders..
Ideen?

Re: Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 13:20
von NicTheQuick
Das ist erstens kein C++-Code, sondern sieht eher aus wie VB und zweitens ist das glaube ich eher ein Makro innerhalb des besagten Excel-Dokuments, glaube ich.

Re: Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 13:26
von Pelagio
Da hat NicTheQuick vollkommen recht, es ist VBA Code und wird als Makro unter Workbook oder im Modul stehen.

Re: Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 13:33
von Kiffi
Normalerweise sind XLS-Dateien schreibgeschützt, wenn sie geöffnet sind.

Versuchs mal ohne Excel:

Code: Alles auswählen

XlsFile.s = "C:\Mappe1.xls"
If RenameFile(XlsFile, XlsFile)   
  Debug "Ja"
Else 
  Debug "Nein"
EndIf
Grüße ... Kiffi

Re: Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 14:57
von Max_der_Held
Okok, in Vba :D So genau hab ichs mir nicht angeschaut, nachdem das Foreach nicht recht übertragbar war.. und was mit workbooks\items() nicht ging..
@Kiffi:
grundsätzlich gut, aber wenn der User das Excelsheet schließt, ist es im Hintergrund solange offen, bis ich mein Programm beende und somit die Objekte freigebe..
Also wird renamefile() immer false zurückgeben, bis ich im programm manuell die objekte freigebe..

Re: Excel - Datei-offen herausfinden

Verfasst: 12.09.2012 15:16
von Max_der_Held
Ok, habs jetzt ohne Excel gelöst:
Ich hol mir alle window-namen und schau ob das richtige Excelsheet dabei ist..
Das ist zumindest eine möglichkeit.
Also mittels EnumWindows_ ( @EnumWindowsProc(), 0)
Danke für die flotte Hilfe

Lg
Max

Code: Alles auswählen

global main_Standard_Excelpath.s

main_Standard_Excelpath = "testdatei11833.xlsx"
EnumWindows_                (   @EnumWindowsProc(), 0)

Procedure.l EnumWindowsProc(hFind, lParam) ; schaut, in Verbindung mit EnumWindows_(@EnumWindowsProc(), 0) , ob das excelfenster mit unsrer datei da ist.
      WindowName.s          = Space(255)
      WindowClass.s         = Space(255)
      If GetWindowText_     ( hFind, WindowName, 255)
          If FindString     ( WindowName , GetFilePart(main_Standard_Excelpath) ,1)
            exc_windowNameGefunden   = 1
            Debug ""
            Debug "GOT IT"
            Debug ""
          EndIf 
      EndIf 
      ProcedureReturn       1 
EndProcedure