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
EndProceduredie 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
EndProcedureWisst 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
EndProcedureDort 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()
EndIfFalls 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 
 
EndProcedureGruß,
Falko
