Excel - Datei-offen herausfinden

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Excel - Datei-offen herausfinden

Beitrag 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?
Zuletzt geändert von Max_der_Held am 12.09.2012 14:53, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Excel - Datei-offen herausfinden

Beitrag 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.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Excel - Datei-offen herausfinden

Beitrag von Pelagio »

Da hat NicTheQuick vollkommen recht, es ist VBA Code und wird als Makro unter Workbook oder im Modul stehen.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Excel - Datei-offen herausfinden

Beitrag 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
a²+b²=mc²
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Excel - Datei-offen herausfinden

Beitrag 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..
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Excel - Datei-offen herausfinden

Beitrag 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 
Antworten