Seite 10 von 18

Re: ExcelFunktionen COMatePlus

Verfasst: 22.06.2012 16:35
von Falko
Can you test this?

Code: Alles auswählen

Procedure.l XLSFunc_GetSideNumbers(ExcelObject.COMateObject)
  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

This ist from this VBA-Script:
http://www.vba-beispiele.de/office.php? ... t=vbaseite
Seitenanzahl = (Worksheets(1).HPageBreaks.Count + 1) * (Worksheets(1).VPageBreaks.Count + 1)
Regards,
Falko

Re: ExcelFunktionen COMatePlus

Verfasst: 23.06.2012 10:58
von Mesa
Hello,

Sorry, it doesn't work even changing worksheet by ActiveSheet.

Do you think it is possible to use pure VBA code with comateplus ?

Mesa.

Re: ExcelFunktionen COMatePlus

Verfasst: 23.06.2012 11:34
von Falko
Hello,

I am not sure. It could be a problem of Microsoft.
Here the following description to ActiveSheet.

http://support.microsoft.com/kb/210663/en

Unfortunately, Comate does not function directly with code VBA and has to go
for Purebasic are adapted. Whether everything functions in COMate,
can say srod in the English forum more about it.


[Edit="VBA"]
I have found there still something else in addition.
Only do not point I, how I with COMatePlus
can use.
Sub SeitenzahlDerAktivenTabelleErmitteln()
Dim i As Integer
i = ExecuteExcel4Macro("Get.Document(50)")
MsgBox "Anzahl der Seiten = " & i
End Sub
( http://cad-it-portal.ch/cad-school/TNT/ ... n_VBA.html ) Excuse me, it is into German
[/Edit]

[Edit2]
Ich schreibe jetzt mal kurz in deutsch für alle anderen weiter.
Dieser VBA-Code gibt wohl die Anzahl der druckbaren Seiten aus, die in einer Tabelle vorhanden sind.
Wenn ich jetzt nur den Code ausführe wird mir 1 angezeigt. Sobald ich mehrere Druckbereiche z.B. auf Tabelle1
erstelle, werden auch mehrere Seiten angezeigt. Nur wie ich dieses in PB mit COMate umsetzen muß, habe ich noch
nicht herausgefunden. Da der VBA-Code oben funktioniert, habe ich hier nur den Anfang der PB-Anpassung probiert.
Vielleicht weiß hier noch jemand, was ich da noch ändern muss. Ich bekomme einen Fehler: Type mismatch in the method parameters.
was wohl auf einen Fehler in den Parametern hinweist.

Code: Alles auswählen

Procedure.i XLSFunc_Get_SidesNumbers(ExcelObject.COMateObject)
  Protected ReturnValue.i
  ReturnValue=ExcelObject\GetIntegerProperty("ExecuteExcel4Macro('Get\Document(50)')"):Debug COMate_GetLastErrorDescription() 
  ProcedureReturn ReturnValue
EndProcedure
dieser Code ist also noch nicht ganz richtig. Invoke gibt nichts aus und SetProperty einen negativen 8stelligen Wert.
[/Edit2]
Falko.

Re: ExcelFunktionen COMatePlus

Verfasst: 25.06.2012 17:34
von Mesa
Hello,

Could you test this :

Code: Alles auswählen

ReturnValue=ExcelObject\GetIntegerProperty("ActiveSheet\PageSetup\Pages\Count")
It could work with Excel 2007 and more but it doesn't work with Excel 2003.

Mesa.

Re: ExcelFunktionen COMatePlus

Verfasst: 25.06.2012 19:02
von Falko
Hello,

this don't work with Excel 2010.
Now i have made an entry in the english forum.

http://www.purebasic.fr/english/viewtop ... 13&t=50353

Maybe answers srod moreover and show a solution.

Regards,
Falko

Re: ExcelFunktionen COMatePlus

Verfasst: 05.07.2012 14:40
von Falko
Hier mal wieder was neues, wozu mir Kiffi seinen Code zur Verfügung gestellt hat.
Danke an Kiffi. :allright:

Die neue Funktion ist: XLSFunc_GetNumberOfPages(ExcelObject.COMateObject,Sheet.s)

Wenn man in einer Tabelle Druckbereiche definiert hat, werden diese damit korrekt gezählt.
Damit man nicht ins aktive Tabellenblatt umschalten muss, habe ich einen zusätzlichen Parameter "Sheet.s"
hinzugefügt. Damit ist es möglich gezielt jedes Tabellenblatt, mit seinem Namen anzusprechen und
die Anzahl der dortigen Druckbereiche auszugeben.

Ich hoffe, ihr könnt es gebrauchen.

Gruß,
Falko

Re: ExcelFunktionen COMatePlus

Verfasst: 05.12.2012 12:39
von Hilli
Hallo Falko,
vielen Dank für die neue/geänderte LIB "Excel-Funtions.pbi".

Ob gewollt oder nicht, ist mir folgendes in der Procedure "RowCol2Range" aufgefallen :

[code]
EndIf
Debug Str(Rest) + " - " + Str(Rest+64) + " - " + Chr(Rest+64)
Ganz = (Col - Rest) / 26
[/code]

(Das ist das Debug welches ich erwähnt hatte)

Gruß Udo

Re: ExcelFunktionen COMatePlus

Verfasst: 05.12.2012 14:11
von Falko
Hallo Udo,

achso, den hatte ich glatt übersehen und
nun entfernt. Danke für den Hinweis :allright:

Gruß,
Falko

Re: ExcelFunktionen COMatePlus

Verfasst: 06.12.2012 19:43
von Falko
Ich habe nun, falls ich nicht eine Funktion vergessen habe,
alle ins Beispielprogramm aufgenommen und hochgeladen:

XLSFunc_Elipse()
XLSFunc_Line()
XLSFunc_Rectangle()
XLSFunc_TextBox()
XLSFunc_RowCol2Range()
XLSFunc_Col2Range()

Folgende zwei Proceduren habe ich nicht
ins Beispiel eingebaut, weil dazu Grafiken benötigt
werden. Aber das sollte für euch kein Problem sein.

XLSFunc_Grafik()
XLSFunc_Image()

Um das Beispielprogramm Test_Excel_Funktion.pb
korrekt ausführen zu können, sollten die ExcelConstants.pbi
und ExcelFunktion.pbi zum einen im selben Verzeichnis
und der Ordner "COMatePlus" im PureBasic-Verzeichnis liegen.
Falls anders gewünscht, müssen die Includes in der ExcelFunktion.pbi
geändert werden.

Gruß,
Falko

Re: ExcelFunktionen COMatePlus

Verfasst: 30.01.2013 22:31
von Falko
Kleine Änderung in folgende Procedure, wo nun ein ProcedureReturn
von mir eingefügt wurde um das Excelobject zurückzugeben.
Ohne dieses löste es beim ...Visible... bei mir einen Speicherfehler aus.
ich hoffe damit sind weitere Probleme in eure Codes behoben. :roll:

Code: Alles auswählen

Procedure XLSFunc_OpenExcelFile(Datei.s); Open ExcelFile
  Protected ExcelObject.COMateObject,Workbook
  ExcelObject = COMate_CreateObject("Excel.Application")
  If ExcelObject
      ExcelObject\Invoke("Workbooks\Open('"+Datei+"')")
  Else
    MessageRequester("Achtung","Bitte geben Sie eine vorhandene xls-Datei mit Pfad an!")
  EndIf
  ProcedureReturn ExcelObject
EndProcedure
Nun läuft mein Testprogramm komplett durch.