Seite 3 von 18
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 11.09.2010 09:10
von ThoPie
Hallo Falko,
ich könnte wieder mal was gebrauchen. Ich habe das Problem, dass beim Erstellen der Excel-Datei und WriteCellS die führenden Nullen bei Zahlen weggelassen werden. Ich habe es auch schon mit einem vorangestellten Hochkomma probiert. Hast du evtl. eine Prozedur parat, mit der ich Zellformate (Text, Zahl, Währung) ändern kann? Also
Vielen Dank
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 11.09.2010 16:36
von Falko
ThoPie hat geschrieben:Hallo Falko,
ich könnte wieder mal was gebrauchen. Ich habe das Problem, dass beim Erstellen der Excel-Datei und WriteCellS die führenden Nullen bei Zahlen weggelassen werden. Ich habe es auch schon mit einem vorangestellten Hochkomma probiert. Hast du evtl. eine Prozedur parat, mit der ich Zellformate (Text, Zahl, Währung) ändern kann? Also
Vielen Dank
Hallo ThoPie,
speziell hierzu habe ich mal die Makros in Excel erzeugen lassen, wie dort der
Quelltext aussieht. Die Procedure müßte somit ähnlich wie beim vorherigen mit Range..
und selektiert werden und dann mit Selection\NumberFormat = '@'
in PB dann angepasst werden.
In VBA sieht es dann so aus:
Code: Alles auswählen
Sub Makro1()
'
' Makro1 Makro
'
'Format für Text setzen
'
Range("E8").Select
Selection.NumberFormat = "@"
End Sub
Sub Makro2()
'
' Makro2 Makro
'
'Format für Zahl mit Zwei stellen und 1000er-Trennung setzen
'
Range("E12").Select
Selection.NumberFormat = "#,##0.00"
End Sub
Sub Makro3()
'
' Makro3 Makro
'
'Format für Währung und Euro setzen
'
Range("E16").Select
Selection.NumberFormat = "#,##0.00 $"
Range("D26").Select
End Sub
Ich werde mir dann mal ausdenken, wie ich das in PB umsetzten kann. Dauert aber noch ein bissle.
Gruß Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 11.09.2010 19:05
von Falko
Dein Wunsch habe ich dir hiermit erfüllt.
Code: Alles auswählen
Procedure SetCellFormat(ExcelObject.COMateObject, Range.s, Format.s);Set another format to Cells
ExcelObject\Invoke("Range('"+Range+"')\Select")
ExcelObject\SEtProperty("Selection\NumberFormat = '"+Format+"'")
EndProcedure
Beispiel-Code und PB-Include siehe oben dazu.
Die Kommentarbox habe ich zugleich um das Visible=#False erweitert. Zwar wollte ich das so machen, wie
es im Makro funktioniert, doch leider geht das so unter COMatePlus nicht so. Deshalb habe ich die alte Procedure
AddComment() im Include auskommentiert stehen gelassen und darüber meine eigene Kreation eingefügt.
Zu den Formaten kannst du am Besten aus der Exceltabelle
die Benutzerdefinierten Vorgaben auswählen und dann in der Zeile
Typ den entsprechenden kompletten String herauskopieren und diesen dann in
dein Programm als Parameter für Format einsetzen sowie anpassen.
Beispiel Euro: #.##0,00 €;[Rot]-#.##0,00 €
Gruß Falko
Gruß Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 12.09.2010 15:57
von ThoPie
Hallo Falko,
vielen vielen Dank für deine schnelle Unterstützung. Gib mir bitte mal deine PayPal-Daten, dann lass ich dir einen kleinen Dank zukommen.
ThoPie
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 12.09.2010 16:49
von Falko
ThoPie hat geschrieben:Hallo Falko,
vielen vielen Dank für deine schnelle Unterstützung. Gib mir bitte mal deine PayPal-Daten, dann lass ich dir einen kleinen Dank zukommen.
ThoPie
Freut mich sehr, das ich dir helfen konnte.
Bezüglich PayPal habe ich jetzt erst Eins angemeldet und muss bis zur Bestätigung noch einige
Tage warten, um dann die PayPal-Daten zu erhalten. Ich melde mich dann natürlich gern zurück.
Gruß, Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 24.09.2010 02:50
von Falko
Folgende Funktion habe ich noch hinzugefügt um den Namen der XLS - Datei zu ermitteln:
Code: Alles auswählen
Procedure.s GetWorkbookName(ExcelObject.COMateObject)
Protected ReturnValue.s
ReturnValue=ExcelObject\GetStringProperty("ActiveWorkbook\Name")
ProcedureReturn ReturnValue
EndProcedure
Und nun funktioniert auch diese Procedure, dank Hilfe von Marko2007
Code: Alles auswählen
Procedure MarkCellsRight(ExcelObject.COMateObject,Offset_Zeile.l=0,Offset_Spalte.l=0,Offset_Zeile1.l=0,Offset_Spalte1.l=0); Marks an offset from active Cell right from there
;Thanks marco2007 (german forum)
Protected.COMateObject active
Protected.s actadress,Range1,Range2,Range
active = ExcelObject\GetObjectProperty("ActiveCell")
actadress=active\GetStringProperty("address")
If active
Range1=active\GetStringProperty("Offset("+Str(Offset_Zeile)+","+Str(Offset_Spalte)+")\address"):Debug Range1
Range2=active\GetStringProperty("Offset("+Str(Offset_Zeile1)+","+Str(Offset_Spalte1)+")\address"):Debug Range2
Range=RemoveString(Range1+":"+Range2,"$"):Debug Range
ExcelObject\Invoke("Range('"+Range+"')\Select")
Debug "MarkCellsRight(): "+COMate_GetLastErrorDescription()
active\Release()
EndIf
EndProcedure
Beide Funktionen habe ich der ExcelFunction.pbi hinzugefügt, bzw. korrigiert.
Gruß Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 25.09.2010 12:43
von ThoPie
Hallo Falko,
ich habe mal wieder zwei Vorschläge / Wünsche:
1. Setzen der Seitenränder
2. Änderung des Formates der Tabelle (Hochformat - Querformat)
Achso noch etwas:
Wäre es nicht sinnvoll in deiner Include alle Prozeduren mit einem Präfix zu versehen, also z.B.:
ThoPie
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 26.09.2010 23:19
von Falko
ThoPie hat geschrieben:Hallo Falko,
ich habe mal wieder zwei Vorschläge / Wünsche:
1. Setzen der Seitenränder
2. Änderung des Formates der Tabelle (Hochformat - Querformat)
Achso noch etwas:
Wäre es nicht sinnvoll in deiner Include alle Prozeduren mit einem Präfix zu versehen, also z.B.:
ThoPie
Hallo ThoPie,
einen Wunsch habe ich dir in der Zwischenzeit erfüllen können. Die Präfixe sind nun
vorhanden und im Beispiel in der PBI und PB angepasst.
Mit den anderen Page-Einstellungsdaten muss ich wohl etwas tiefer an diese
VBA-Macros reingehen. Sobald ich etwas mehr Luft zu meinen aktuellen ExcelProjekt
habe, werde ich mich aber gleich dran machen.
Nach VBA sind Seitenformat HochKannt und Quer sowie die Randeinstellungen unter
einer Funktion einzustellen. Das sieht im Originalmakro etwa so aus:
Code: Alles auswählen
Sub Makro1()
'
' Makro1 Makro
'
'
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.787401575)
.BottomMargin = Application.InchesToPoints(0.787401575)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 200
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.78740157480315)
.RightMargin = Application.InchesToPoints(0.78740157480315)
.TopMargin = Application.InchesToPoints(0.984251968503937)
.BottomMargin = Application.InchesToPoints(0.984251968503937)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 200
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
End Sub
Dazu muss ich mir in COMatePlus aber was einfallen lassen, da man dort leider kein With verwenden kann,
als auch alle Objekte,Methoden usw. auseinander pflücken muss.
Das wäre natürlich schöner, wenn man mehrere Funktionen bzw. die Methoden in PB und Comate
verschachteln könnte.
Gruß, Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 27.09.2010 20:15
von Falko
Ich habe nun die von ThoPie gewüinschten Funktionen des PageSetups als PB-Source mit Seitenrändern incl. Header-, und Footer-Rand
sowie das Seitenformat Hoch-, und Querformat in die Lib eingebaut.
Die Procedure sieht dann so aus. Dabei habe ich zur Überprüfung die ganzen Debugs drin gelassen.
Code: Alles auswählen
Procedure XLSFunc_PageSetup(ExcelObject.COMateObject,Orient.l=#xlPortrait,Left.d=1.3,Right.d=1.5,Top.d=2.0,Bottom.d=2.0,Header.d=1,Footer.d=1,HorCenter.b=#False,VertCenter.b=#False); xlLandscape Or xlPortrait
Protected.COMateObject active
Protected.d LeftM,RightM,TopM,ButtomM,HeaderM,FooterM
active = ExcelObject\GetObjectProperty("ActiveSheet")
If active
active\SetProperty("PageSetup\Orientation="+Str(Orient))
Debug "Orientation: "+COMate_GetLastErrorDescription()
LeftM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Left)+")")
active\SetProperty("PageSetup\LeftMargin="+StrD(LeftM))
Debug "LeftMargin: "+COMate_GetLastErrorDescription()
RightM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Right)+")")
active\SetProperty("PageSetup\RightMargin="+StrD(RightM))
Debug "RightMargin: "+COMate_GetLastErrorDescription()
TopM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Top)+")")
active\SetProperty("PageSetup\TopMargin="+StrD(TopM))
Debug "TopMargin: "+COMate_GetLastErrorDescription()
ButtomM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Bottom)+")")
active\SetProperty("PageSetup\BottomMargin="+StrD(ButtomM))
Debug "BottomMargin: "+COMate_GetLastErrorDescription()
HeaderM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Header)+")")
active\SetProperty("PageSetup\HeaderMargin="+StrD(HeaderM))
Debug "HeaderMargin: "+COMate_GetLastErrorDescription()
FooterM=ExcelObject\GetRealProperty("Application\CentimetersToPoints("+StrD(Footer)+")")
active\SetProperty("PageSetup\FooterMargin="+StrD(FooterM))
Debug "FooterMargin: "+COMate_GetLastErrorDescription()
active\SetProperty("PageSetup\CenterHorizontally="+Str(HorCenter))
Debug "CenterHorizontally: "+COMate_GetLastErrorDescription()
active\SetProperty("PageSetup\CenterVertically="+Str(VertCenter))
Debug "CenterVertically: "+COMate_GetLastErrorDescription()
EndIf
active\Release()
EndProcedure
Gruß Falko
Re: ExcelFunktionen PureDisphelper / COMate
Verfasst: 27.09.2010 21:05
von marco2007
Noch ein kleiner Vorschlag: Seite 4? Der tolle Include-Code sollte im ersten Posting eines Threads sein
