Excel Comate Datei ohne Rückfrage speichern

Anfängerfragen zum Programmieren mit PureBasic.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,
Falko hat geschrieben: Ich habe nun alles soweit angepasst, bis keine Fehlermeldung bei den Comate-funktionen auftauchen. Nun ist es so, wie Du es hast. Excel wird im Task nicht beendet.
vielen Dank das Du noch nicht aufgegeben hast. :)

Ich habe den Code ausgeführt und ich habe im Debugger
10 x Okay erhalten.
Jedoch bleibt es wie Du es schon festgestellt hast, Excel bleibt im
Taskmanager. :cry:

Dann liegt es ja gottseidank nicht an uns.
Könnte es sein, dass es bei Comate falsch verarbeitet wird?
Es ist nur eine Vermutung. In der gewünschten Konstellation
funktioniert der Quit() Befehl durch Comate nicht?

Nochmal vielen Dank für Deine Hilfe.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hy,

also bei mir läuft der Code. Der Debugger gibt jedes mal "Okey" aus und im Task-Manager ist kein Excel mehr.

Was für ein Office verwendet ihr? Ich nutze Office 2007 und Office 2000.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@CNESM

Ich nutze Office 2007 unter Vista X64.

Wenn ich die Debugs raus habe und bei Save = #True und Close
=#True einstelle, wird bei mir im Taskmanager das Excel entfernt.

Aber wenn ich hinter jeder Comatefunktion ein Error ausgeben lasse,
sind diese dann nicht Okay.

Somit habe ich überall, wo der Fehler auftauchte, die Trues
weggemacht und keine Errormeldungen erhalten, dafür bleibt aber
das Excel im Task hängen.

Achja, wichtig ist es bei diesem Test unter C:\ den Ordner Daten
anzulegen und dort eine leere Exceldatei Kassenbuch2008.xls
vorhanden zu haben.


Hast du das auch gemacht?

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Also folgenden Code habe ich etwas angepasst. Läuf der bei euch?

Code: Alles auswählen

IncludePath #PB_Compiler_Home+"comate_pb4-3" 
XIncludeFile "COMate.pbi" 

Define.COMateObject ExcelObject, WorkBook 
Define.COMateObject ExcelObject, WorkSheet 
Define.COMateObject ExcelObject, Sheet 

ExcelObject = COMate_CreateObject("Excel.Application") 
Debug COMate_GetLastErrorDescription() 
ExcelObject\SetProperty("Visible = #False") 
Debug COMate_GetLastErrorDescription() 
ExcelObject\Invoke("Workbook\Open('C:\Test\Kassenbuch2008.xls')") 
Debug COMate_GetLastErrorDescription() 
If ExcelObject 
  intRow.i = 13 

    For a=1 To ExcelObject\GetIntegerProperty("Worksheets\Count") 
      TabName$ = ExcelObject\GetStringProperty("Worksheets("+ Str(a) +")\Name") 
        If Right(TabName$,4) = Str(2008) 
          WorkSheet = ExcelObject\Invoke("Sheets('" + TabName$ + "')\Activate") 
            While ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",8)\Value") <> "" 
              Cell6$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",9)\Value") 
              ExcelObject\SetProperty("Cells(" + Str(intRow) + ",14) = "+ Cell6$ + "") 
              intRow + 1 
            Wend 
        intRow = 13 
        EndIf 
    Next 
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\SetProperty("DisplayAlerts = #False") 
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\Invoke("ActiveWorkbook\Save") 
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\Invoke("Workbooks\Close") 
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\SetProperty("DisplayAlerts = #True") 
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\Invoke("Quit()")
    Debug COMate_GetLastErrorDescription() 
    ExcelObject\Release()    
    Debug COMate_GetLastErrorDescription() 
Else 
  MessageRequester("COMate - Excel", "Couldn't create the application object!") 
EndIf 
Mit Save = #True sagst du Excel es wurden keine Änderungen vorgenommen und Excel speichert nicht. Daher schließt sich Excel OHNE Änderungen zu speichern.

Datei habe ich angelegt.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ok, nachdem du aus dem Zweizeiler einen gemacht hast, funktionitert es :allright:

Code: Alles auswählen

WorkSheet = ExcelObject\GetObjectProperty("Sheets('" + TabName$ + "')")
WorkSheet\Invoke("Activate()")
zu

Code: Alles auswählen

WorkSheet = ExcelObject\Invoke("Sheets('" + TabName$ + "')\Activate")
[Edit]
>>>Mit Save = #True sagst du Excel es wurden keine Änderungen vorgenommen und Excel speichert nicht. Daher schließt sich Excel OHNE Änderungen zu speichern.

Von der Beschreibung her, dachte ich, dass das nur Saved betrifft.
Zu mindestens, was ich gegoogld habe.

Eine schöne VBA-Script-Seite zum übernehmen für PB Comate, habe ich dazu noch hier gefunden.

http://www.kmbuss.de/Excel-CD/vba-codes.htm


[/Edit]

Gruß Falko
Zuletzt geändert von Falko am 01.04.2009 15:23, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,
CNESM hat geschrieben:Also folgenden Code habe ich etwas angepasst. Läuf der bei euch?
WAHNSINN. Es funktioniert.:allright: Die Tabelle wird geändert, sie wird gespeichert und ... EXCEL ist nicht mehr im Taskmanager. :D

Was hast Du denn jetzt geändert, damit es funktioniert?

Bin total begeistert.

Vielen Dank CNESM und
vielen Dank Falko für Eure Unterstützung und Geduld.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,

na da war ich wohl zu langsam mit meiner Frage. :)
Falko hat geschrieben:Ok, nachdem du aus dem Zweizeiler einen gemacht hast, funktionitert es :allright:

Code: Alles auswählen

WorkSheet = ExcelObject\GetObjectProperty("Sheets('" + TabName$ + "')")
WorkSheet\Invoke("Activate()")
zu

Code: Alles auswählen

WorkSheet = ExcelObject\Invoke("Sheets('" + TabName$ + "')\Activate")


Vielen Dank für die Erläuterung. Das es daran liegt, wäre ich nie im Leben drauf gekommen.
Falko hat geschrieben: Eine schöne VBA-Script-Seite zum übernehmen für PB Comate, habe ich dazu noch hier gefunden.

http://www.kmbuss.de/Excel-CD/vba-codes.htm

Danke für den Tipp mit der VBA-Code Seite.

Bin total begeistert. Nochmals Danke für Deine Hilfe und Geduld bei diesem Problem. :allright:
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Code: Alles auswählen

WorkSheet = ExcelObject\GetObjectProperty("Sheets('" + TabName$ + "')") 
WorkSheet\Invoke("Activate()")
heisst in VBA übersetzt:

Code: Alles auswählen

Sheets(TabName)
Sheets(TabName).Activate
In VBA würde bei der ersten Zeile ein Fehler erscheinen.

Weiterhin war auch beim ermitteln des Zelleninhalts nicht angegeben, was Excel machen soll:

Code: Alles auswählen

ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",8)")
ist in VBA:

Code: Alles auswählen

Cells(intRow,8)
Müsste aber so heissen, sonst erscheint ebenfalls ein Fehler:

Code: Alles auswählen

Cells(intRow,8).Value
oder für ältere Versionen von Excel (Office 2000)

Code: Alles auswählen

Cells(intRow,8).Text
Zwei weitere sehr gute Foren sind:

http://www.office-loesung.de
http://www.herber.de
Von der Beschreibung her, dachte ich, dass das nur Saved betrifft.
Zu mindestens, was ich gegoogld habe.
Sorry, meinte natürlich saved :-)
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,

danke für die zusätzlichen Erläuterungen.

Komisch nur, dass die Excel Tabellen trotz dieser aufgeführten
Fehler, die Zellen richtig gefüllt hat und dann auch noch gespeichert hat.
Das einzige, was war, war das Excel im Taskmanager stehen blieb.

Vielen Dank für Deine Hilfe. :D Bin total happy, dass es jetzt klappt.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Vielleicht liegt das an COMate. Hinter den Befehl "Activate" und "Value" stecken ja auch bestimmte Variablen bzw. Befehle, die scheinbar COMate auch ohne diesen Zusatz "richtig" übergibt und ausführt. Da aber VBA mäßig dies nicht richtig ist, bricht Excel bzw. die Application bei diesen Zeilen ab und bleibt hängen. COMate aber arbeitet weiter, weil für ihn das alles richtig ist. Alle Befehle, die somit mit dem Ansprechen von Application zu tun hat, werde nicht mehr ausgeführt (Siehe quit). Das DisplayAlerts scheinbar dennoch funktioniert ist nur ne falsche Erscheinung, da die Application diese Befehlen garnicht erst ausführt (da hängen geblieben). Es erscheint aber dennoch keine Abfrage, ob man speichern möchte, da die Excel Appplication ja nicht mehr arbeitet. Vielleicht liege ich mit der Vermutung auch vollkomme falsch <) und es hat nen anderen Hintergrund. Wer weiß das schon bei Microsoft :freak:

Generell gebe ich dir den Tipp, im ersten Schritt erst in VBA Excel zu entwickeln und dann das ganze in COMate zu übertragen. Dadurch ist man auf der sicheren Seite.
Antworten