Fragen zu COMate
- 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:
Re: Fragen zu COMate
Hat sich hiermit erledigt. Ich habe selbst eine passende Lösung nach ca. 1,5Tagen gefunden.
Und kann dieses endlich in meiner ExcelFunktions-Lib einfügen.
http://www.purebasic.fr/english/viewtop ... 15#p383115
Gruß,
Falko
Und kann dieses endlich in meiner ExcelFunktions-Lib einfügen.
http://www.purebasic.fr/english/viewtop ... 15#p383115
Gruß,
Falko
- 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:
Re: Fragen zu COMate
@all,
auf Anfrage aus dem englischen Forum habe ich für meine Excelfunktions-LIB folgendes
versucht umzusetzen.
Es soll die max. Anzahl der druckbaren Seiten aus der aktiven Exceltabelle festgestellt werden.
Dazu gibt es zwei verschiedene Möglichkeiten, die ich noch nicht richtige in PB umsetzen konnte.
Speziell habe ich die zweite Version des VBA-Scripts probiert, welche die Anzahl der Druckseiten auf
die aktive Tabelle feststellen soll. Man kann ja in Excel mehrere Druckbereiche vorgeben, die
in VBA auch korrekt gezählt werden. Nur komme ich in PB mit COMate nicht so richtig weiter.
Hier, so wie ich eine Procedure dafür getestet habe:
Wenn ich diese so ausführe, kommt folgende Fehlermeldung:
Ich würde mich sehr freuen, wenn ihr mir hierzu weiter helfen könntet.
Gruß,
Falko
auf Anfrage aus dem englischen Forum habe ich für meine Excelfunktions-LIB folgendes
versucht umzusetzen.
Es soll die max. Anzahl der druckbaren Seiten aus der aktiven Exceltabelle festgestellt werden.
Dazu gibt es zwei verschiedene Möglichkeiten, die ich noch nicht richtige in PB umsetzen konnte.
sowieVBA-Script 1 hat geschrieben:WorkSheets(1).HPageBreaks.Count
und
WorkSheets(1)VPageBreaks.Count
Die erste Möglichkeit welche ich in PB probiert habe sieht so aus:VBA-Script 2 hat geschrieben:ExecuteExcel4Macro("Get.Document(50)")
Code: Alles auswählen
Procedure.l XLSFunc_GetSideNumbers(ExcelObject.COMateObject); Test1 max. Druckerseiten
Protected HPage.l,VPage.l
HPage=ExcelObject\GetIntegerProperty("WorkSheets(1)\HPageBreaks\Count")+1:Debug COMate_GetLastErrorDescription()
VPage=ExcelObject\GetIntegerProperty("WorkSheets(1)\VPageBreaks\Count")+1:Debug COMate_GetLastErrorDescription()
ProcedureReturn HPage*VPage
EndProcedure
die aktive Tabelle feststellen soll. Man kann ja in Excel mehrere Druckbereiche vorgeben, die
in VBA auch korrekt gezählt werden. Nur komme ich in PB mit COMate nicht so richtig weiter.
Hier, so wie ich eine Procedure dafür getestet habe:
Code: Alles auswählen
Procedure.i XLSFunc_Get_SideNumbers(ExcelObject.COMateObject); Test2 max. Druckerseiten
Protected ReturnValue.i
ReturnValue=ExcelObject\GetIntegerProperty("ExecuteExcel4Macro('Get\Document(50)')"):Debug COMate_GetLastErrorDescription()
ProcedureReturn ReturnValue
EndProcedure
Wisst ihr, was ich hier falsch mache bzw. was ich daran ändern muss?COMatePlus hat geschrieben:Type mismatch in the method parameters
Ich würde mich sehr freuen, wenn ihr mir hierzu weiter helfen könntet.
Gruß,
Falko
Re: Fragen zu COMate
Probier mal:
Grüße ... Kiffi
Code: Alles auswählen
ReturnValue=ExcelObject\GetIntegerProperty("ExecuteExcel4Macro('Get\Document(50 As Integer)')"):Debug COMate_GetLastErrorDescription()
a²+b²=mc²
- 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:
Re: Fragen zu COMate
Danke Peter,
das mit AS Integer hatte ich ähnlich probiert. Nur hinter der Klammer bzw. dem Hochkomma.
Dabei kam die gleiche, englische Fehlermeldung wie oben heraus.
Direkt hinter dem Wert, daran hatte ich nicht gedacht. Nun kommt eine ganz andere Fehlermeldung,
vermutlich direkt von Excel VBA:
Falko
das mit AS Integer hatte ich ähnlich probiert. Nur hinter der Klammer bzw. dem Hochkomma.
Dabei kam die gleiche, englische Fehlermeldung wie oben heraus.
Direkt hinter dem Wert, daran hatte ich nicht gedacht. Nun kommt eine ganz andere Fehlermeldung,
vermutlich direkt von Excel VBA:
Gruß,Debugger hat geschrieben: Okay.
Die eingegebene Formel enthält einen Fehler.
• Klicken Sie auf 'Hilfe', um Informationen zur Behebung von verbreiteten Problemen mit Formeln zu erhalten.
• Klicken Sie auf 'Funktions-Assistent' (Registerkarte 'Formeln', Gruppe 'Funktionsbibliothek'), um Hilfe bei der Eingabe einer Formel zu erhalten.
• Wenn Sie nicht versuchen, eine Formel einzugeben, vermeiden Sie Gleichheitszeichen (=) oder Minuszeichen (-). Falls diese Zeichen erforderlich sind, fügen Sie vorher ein einzelnes Anführungszeichen (') ein.
0
Okay.
Falko
Re: Fragen zu COMate
dann vergiss das. War nur ein Schuss ins Blaue.Nun kommt eine ganz andere Fehlermeldung,
Ich schätze mal, dass dieses komische Makro ein Variant zurückliefert.
Demzufolge müsstest Du es mal mit GetVariantProperty() probieren.
Grüße ... Kiffi
a²+b²=mc²
- 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:
Re: Fragen zu COMate
Das geht schonmal in Richtung ohne Fehlermeldung
, obwohl der Wert ein bisschen zu hoch ist.
Ich habe irgendwo gelesen, das jemand mit Excel 2010 gleiche Probleme hatte und
seinen Script mit einigen VBA-Befehlen erweitert hatte. Bei ihm kamen auch unsinnige Werte.
den aktuellen Code habe ich soweit alles ausprobiert. Nur ist der Wert nicht korrekt.
Vielleicht mache ich ja mit dem Variant was falsch.
Und die Ausgabe hierzu sieht so aus:
VBA funktioniert es korrekt. Aber in PB ist das leider nicht so einfach
[/Edit]
Gruß,
Falko

Ich habe irgendwo gelesen, das jemand mit Excel 2010 gleiche Probleme hatte und
seinen Script mit einigen VBA-Befehlen erweitert hatte. Bei ihm kamen auch unsinnige Werte.
[Edit]Okay.
Okay.
64423952
Okay.
den aktuellen Code habe ich soweit alles ausprobiert. Nur ist der Wert nicht korrekt.
Vielleicht mache ich ja mit dem Variant was falsch.
Code: Alles auswählen
Procedure.i XLSFunc_Get_SideNumbers(ExcelObject.COMateObject); Test2 max. Druckerseiten
Protected ReturnValue.Variant
ReturnValue\intVal=ExcelObject\GetVariantProperty("ExecuteExcel4Macro('Get\Document(50)')"):Debug COMate_GetLastErrorDescription()
ProcedureReturn ReturnValue
EndProcedure
Dort müsste aber ein Wert von mindestens 1 stehen. Manuell mit von Hand inOkay.
Okay.
1638248
Okay.
Okay.
VBA funktioniert es korrekt. Aber in PB ist das leider nicht so einfach

[/Edit]
Gruß,
Falko
- 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:
Re: Fragen zu COMate
Könnte das Problem auch von COMatePlus her kommen?
Hier ist eine komplette Beschreibung mit verschiedenen VBA-Codes dazu.
Dort wird auch nicht Variant sondern Integer vorgegeben, welcher leider so auch
nicht klappt.
http://cad-it-portal.ch/cad-school/TNT/ ... n_VBA.html
Gruß,
Falko
Hier ist eine komplette Beschreibung mit verschiedenen VBA-Codes dazu.
Dort wird auch nicht Variant sondern Integer vorgegeben, welcher leider so auch
nicht klappt.
http://cad-it-portal.ch/cad-school/TNT/ ... n_VBA.html
Gruß,
Falko
- 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:
Re: Fragen zu COMate
Ich hatte auch im englischen Forum nach folgende Funktion gefragt, ob srod zu COMate
dazu eine Lösung anbieten könnte:
http://www.purebasic.fr/english/viewtop ... 13&t=50353
Leider warte ich schon einige Tage, wobei der Thread von vielen gelesen wurde, aber wohl
keine Lösung in Sicht ist.
Vielleicht hat einer noch einen passenden Tip dazu. Variant ist schon richtig, damit was ohne
COMate-Fehler angezeigt wird, aber der aktuelle Wert, den ich bei drei Druckseiten innerhalb
einer Tabelle markiert habe, kommt komischerweise immer 10 heraus. Egal, wie viele Seiten ich
hinzufüge. auch kann man mit dieser Funktion ExecuteExcel4Macro() noch vieles mehr anstellen,
wenn es erst mal unter COMate funktioniert.
Gruß,
Falko
dazu eine Lösung anbieten könnte:
http://www.purebasic.fr/english/viewtop ... 13&t=50353
Leider warte ich schon einige Tage, wobei der Thread von vielen gelesen wurde, aber wohl
keine Lösung in Sicht ist.
Vielleicht hat einer noch einen passenden Tip dazu. Variant ist schon richtig, damit was ohne
COMate-Fehler angezeigt wird, aber der aktuelle Wert, den ich bei drei Druckseiten innerhalb
einer Tabelle markiert habe, kommt komischerweise immer 10 heraus. Egal, wie viele Seiten ich
hinzufüge. auch kann man mit dieser Funktion ExecuteExcel4Macro() noch vieles mehr anstellen,
wenn es erst mal unter COMate funktioniert.

Gruß,
Falko
Re: Fragen zu COMate
Mensch, Falko! Du bist echt ein zäher Hund
Schlechte Nachricht: Ich habe bisher auch keine Lösung gefunden,
den Variant-Wert korrekt auszulesen.
Gute Nachricht: Ich habe eine andere Lösung gefunden (eine meiner
gefürchteten Knie-Brust-Rücken-Auge-Lösungen
).
Bin jetzt zu faul, was erklärendes zum Code zu schreiben.
Falls was unklar ist: Frag nach.
Grüße ... Kiffi

Schlechte Nachricht: Ich habe bisher auch keine Lösung gefunden,
den Variant-Wert korrekt auszulesen.
Gute Nachricht: Ich habe eine andere Lösung gefunden (eine meiner
gefürchteten Knie-Brust-Rücken-Auge-Lösungen

Code: Alles auswählen
; COMate-Include einfügen
EnableExplicit
Define oExcelApp.COMateObject
Define oScriptControl.COMateObject
Define VBS.s
Define Gesamtseitenzahl
oExcelApp = COMate_CreateObject("Excel.Application")
If oExcelApp
oExcelApp\Invoke("Workbooks\Open('d:\mappe1.xls')") ; Pfad anpassen
oScriptControl = COMate_CreateObject("ScriptControl")
If oScriptControl
oScriptControl\SetProperty("Language = 'VBScript'")
oScriptControl\Invoke("AddObject('oExcelApp', " + Str(oExcelApp) + " As COMateObject)")
VBS = "ReturnValue = oExcelApp.ExecuteExcel4Macro(" + Chr(34) + "Get.Document(50)" + Chr(34) + ")"
oScriptControl\Invoke("AddCode('" + VBS + "')")
Gesamtseitenzahl = oScriptControl\GetIntegerProperty("Eval('ReturnValue')")
Debug Gesamtseitenzahl
oScriptControl\Release()
Else
Debug COMate_GetLastErrorDescription()
EndIf
oExcelApp\Invoke("Quit()")
oExcelApp\Release()
Else
Debug COMate_GetLastErrorDescription()
EndIf
Falls was unklar ist: Frag nach.
Grüße ... Kiffi
a²+b²=mc²
- 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:
Re: Fragen zu COMate
Hallo Peter,
wie du schon weißt, bin ich doch immer hartnäckig
Aber ohne deine Hilfe und super Ideen, etwas umzusetzen,
worunter man scheitert, hätte ich die Lösung niemals hin bekommen.
Ich danke Dir vielmals für dieses Beispiel.
Ich habe deinen Code für die ExcelFunctions-Lib etwas angepasst. Wenn du nichts
dagegen hast, möchte ich die wie folgt einbauen.
[Edit] Nochmal überarbeitet [/Edit]
Gruß,
Falko
wie du schon weißt, bin ich doch immer hartnäckig

Aber ohne deine Hilfe und super Ideen, etwas umzusetzen,
worunter man scheitert, hätte ich die Lösung niemals hin bekommen.

Ich danke Dir vielmals für dieses Beispiel.
Ich habe deinen Code für die ExcelFunctions-Lib etwas angepasst. Wenn du nichts
dagegen hast, möchte ich die wie folgt einbauen.
Code: Alles auswählen
Procedure.l XLSFunc_GetNumberOfPages(ExcelObject.COMateObject,Sheet.s)
; Hint from Kiffi; Get Number of printer pages
; http://www.purebasic.fr/german/viewtopic.php?p=303424#p303424
Protected oScriptControl.COMateObject
Protected NumberOfPages.l, oExcelApp.l, VBS.s
oScriptControl = COMate_CreateObject("ScriptControl")
If oScriptControl
oScriptControl\SetProperty("Language = 'VBScript'")
oScriptControl\Invoke("AddObject('oExcelApp', " + Str(ExcelObject) + " As COMateObject)")
VBS = "ReturnValue = oExcelApp.ExecuteExcel4Macro(" + Chr(34) + "Get.Document(50,"+Chr(34)+Chr(34)+Sheet+Chr(34)+Chr(34)+")" + Chr(34) + ")"
oScriptControl\Invoke("AddCode('" + VBS + "')")
NumberOfPages = oScriptControl\GetIntegerProperty("Eval('ReturnValue')")
oScriptControl\Release()
ProcedureReturn NumberOfPages
Else
Debug COMate_GetLastErrorDescription()
EndIf
EndProcedure
Gruß,
Falko