Fragensteller
Win Forms

Frage
-
Hallo,
entweder bin ich voll neben der kappe oder steh einfach nur auf dem Schlauch. Ich möchte ein Add in für PPT schreiben (vb.net), das soll ja nicht das problem sein. hab mit VS2010 auch prima das Addin (soll heissen die Ribbon-leiste mit Button) gebasteltund diverse Menübandrückrufe eingebunden. Nun hab ich extra noch eine Windows form erstellt (über Menüpunkt Hinzufügen) und fleissig mit Steuerelementen + dazugehörige Funktionen und Prozeduren gefüllt.... und jetzt kommt das problem -> es will nicht starten....soll heissen, ich hatte die WinForm vorher mal als eigenständiges Projekt getestet und da funktioniert alles wie es soll, daran kann es also nicht liegen, ich bekomm irgendwie den aufruf nicht hin das wenn auf Button5 in dem von mir erstellten Ribbon geklickt wird die winform aufgerufen wird (nicht die Winform.exe sondern die form die ich neu erstellt hab im Addin)
kurze aufgliederung :
Ribbon1.vb
Ribbon1.xml
ThisAddin.vb
Form1.vb
class1.vb
class2.vb
class3.vb
in Form1.vb ist ja zum laden der Form : Privat sub Form1_Load(.......) handle as me.load
Problem Nummero Uno : Muss ich im Menübandrückruf (Nothing, Nothing) als sender und e angeben?
in Ribbon1.vb - Menübandrückruf folgender aufruf der Form :
Privat Sub LadeForm()
Dim frmForm as New Form1 'ist ja die Klasse die den Load-Event beinhaltet
frmForm.Form1_Load() ' Nothing, Nothing ??
Problem nummero due : Privat Sub LadeForm() <<-- right ??
Habe über einzelschritt-debugging mal den ablauf verfolgt, anscheinend wird die Form unsichtbar geladen da der source ohne fehler durchlaufen wird. Bin mitlerweile am verzweifeln. Wer weiss rat bzw kann helfen das bei klick auf den Button im Ribbon (ist in der xml auch definiert mit verweis auf LadeForm() ) die Windows Form auch angezeigt wird?
P.S. Office 2007 ... PowerPoint 2007
Alle Antworten
-
Hallo,
in Form1.vb ist ja zum laden der Form : Privat sub Form1_Load(.......) handle as me.load
Problem Nummero Uno : Muss ich im Menübandrückruf (Nothing, Nothing) als sender und e angeben?
Nein.
in Ribbon1.vb - Menübandrückruf folgender aufruf der Form :
Privat Sub LadeForm()
Dim frmForm as New Form1 'ist ja die Klasse die den Load-Event beinhaltet
frmForm.Form1_Load() ' Nothing, Nothing ??
Formulare werden über die Show- bzw. ShowDialog- Methode geladen und zur Anzeige gebracht. Form.Load stellt das Ereignis dar, das während der ersten Initialisierung des Formulars, vor dem Anzeigen durchlaufen bzw. ausgelöst wird.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Jan Tittel Mittwoch, 18. August 2010 19:33
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 25. August 2010 08:10
- Tag als Antwort aufgehoben RL-SM Mittwoch, 25. August 2010 12:38
-
Wenn ich im Menübandrückruf frmForm.Form1_Load() <<-- in den klammern nichts rein schreibe (also nicht mal Nothing, Nothing) mault VS2010 das inForm1.vb in der Sub Form1_Load sender und e nicht definiert wurden bzw der Fehler kommt in der Ribbon1.vb für die Sub im Menübandrückruf " frmForm.Form1_Load()" ....von daher muss doch irgendwas die Klammer füllen ?!?
oder lass ich das frmForm.Form1_Load() im Menübandrückruf weg und schreib statt dessen ShowDialog(frmForm) ?
'Ribbon1.vb Menübandrückrufe'
Privat Sub LadeForm()
Dim frmForm as New Form1
ShowDialog(frmForm)
end Sub
also so?
und in Form1.vb die Form1_Load so beibehalten wie sie vom Designer erstellt wurde? Also:
Privat Sub Form1_Load(ByVal sender as Object, e as SystemArgs) Handle Me.Load
.....
end Sub
so?
-
Jepp, so sollte es funktionieren. Hast du es schon getestet?
Nochmal etwas zur Erläuterung: ..._Load, ..._Click usw. sind alles Eventhandler. Was darin passiert kannst du natürlich beeinflussen, aber die ruft man in der Regel NIE direkt auf sondern die werden automatisch beim Eintreten des entsprechenden Ereignisses ausgelöst. Formulare werden mit Show bzw. ShowDialog angezeit (je nachdem, ob es modal oder nicht-modal sein soll).
Viele Grüße
Jan
Bearbeitung: Ach ja, die _Load bleibt so bestehen, wie vom Designer erstellt. Außer du willst, das beim "Laden" etwas passieren soll wie z.B. das Abrufen von Daten aus einer Datenbank. Dann gehört der Code dafür dort hinein.
- Bearbeitet Jan Tittel Mittwoch, 18. August 2010 19:32 Bearbeitung
-
Hallo,
Wenn ich im Menübandrückruf frmForm.Form1_Load() <<-- in den klammern nichts rein schreibe (also nicht mal Nothing, Nothing) mault VS2010 das inForm1.vb in der Sub Form1_Load sender und e nicht definiert wurden bzw der Fehler kommt in der Ribbon1.vb für die Sub im Menübandrückruf " frmForm.Form1_Load()" ....von daher muss doch irgendwas die Klammer füllen ?!?
Ja, wenn Du die Methode Form_Load aufrufen möchtest, musst Du natürlich möglichst sinnvolle Parameter übergeben. Aber für den Zweck, Dein Formular anzuzeigen, musst Du nicht Form_Load aufrufen. Das war mit meinem "Nein" in meiner vorherigen Antwort gemeint.
oder lass ich das frmForm.Form1_Load() im Menübandrückruf weg
Ja.
und schreib statt dessen ShowDialog(frmForm) ?
Nein. Wie auch in der Dokumentation zu lesen ist, ist ShowDialog eine Methode Deines Formulars. Der Aufruf gestaltet sich also so:
frmForm.ShowDialog()
und in Form1.vb die Form1_Load so beibehalten wie sie vom Designer erstellt wurde?
Ja. Form_Load wird automatisch in Folge des ShowDialog Aufrufs ausgeführt.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo,
Thorsten hat natürlich Recht! Das hatte ich übersehen. Ich hatte nur auf ShowDialog() geachtet und dann nicht weiter genau hingesehen. Sorry. Insofern stimmt meine vorherige Aussage nicht, dass es mit ShowDialog(frmForm) funktioniert.
Viele Grüße
Jan
-
Hallo,
Danke euch beiden, hat prima funktioniert ... musste aber in der Rückruf-Sub innerhalb der Klammern noch eintragen (ByVal irgendwas As Office.IRibbonControl) .... leer darf die also nicht sein ... also nicht die showdialog sondern bei:
Privat Sub LadeDialog(ByVal Variable as OfficeIRibbonControl) <<-- das mein ich ...
Nun läd zwar meine erstellte Form aber die dynamisch zur Laufzeit zu erstellenden Inhalte in der Form werden nicht mitgeladen. So fern ich die Klassen rauslasse in denen diese definiert und instanziiert werden und nur die Klassen aktiv lasse in denen die statischen Steuerelemente vorhanden sind (zur Designzeit) läd die Form auch ziemlich schnell, aktiviere ich die Klassen wieder mit den dynamischen Geschichten drin dauert es eine ganze Zeit bis die Form erscheint aber dann halt ohne den dynamischen Inhalt *mecker* Eine Idee wie das klappt das auch dynamische Steuerelemente wie Pictureboxen mit angezeigt werden?
Kurz mal eine Aufgliederung des ganzen :
Ribbon1.vb -> ruft Form1.vb auf -> innerhalb _Load : Dim bla as new class1 .... bla() -> innerhalb class1 die Sub bla() verweisst auf 3 Klassen : dim blubb as new class2 ... dim peng as new class3 .... din boing as new class4 .... die damit erstellten objekte rufen dann die entsprechenden sub's innerhalb ihrer klasse auf .... class2 und class3 behinhalten dynamisch erstellte controls (control-arrays)und deren Funktionen, class4 statische + deren Funktionen. (jede klasse bildet in der form irgendetwas auf einer nur für die klasse bestimmte registerkarte auf einem TabControl ab. Das TabControl ist statisch genau wie die Registerkarten)
P.S. Ihr habt wohl auch kein Bett, wenn ich so die Uhrzeiten sehe wann ihr geantwortet habt ;)
- Bearbeitet RL-SM Donnerstag, 19. August 2010 07:55 edit
-
Hallo,
ich will Thorsten hier nicht die Butter vom Brot nehmen und überlasse ihm gerne die Antwort. Allerdings gibt es schon mal ein paar wesentliche Informationen, die zum Verständnis fehlen.
Das ist jetzt nicht spöttisch gemeint, aber gerade die ganzen "bla, blubbs, peng, boing" usw. sind wichtig und vor allem auch die Vererbungshierarchie. Das fängt mit class1 an. Wovon erbt class1? Was wird in class1 erstellt?
Wie erstellst du die PictureBox? Wird diese irgendwo in class3 erstellt, ist klar, dass sie auf dem Formular nicht angezeigt wird, auch wenn class3 aus dem Formular erzeugt wird. Hier müsste z.B. ein Verweis auf das Formular weitergereicht werden. All das sind wichtige Einzelheiten, die noch fehlen.
Viele Grüße
Jan
-
Hallo,
Nun läd zwar meine erstellte Form aber die dynamisch zur Laufzeit zu erstellenden Inhalte in der Form werden nicht mitgeladen. So fern ich die Klassen rauslasse in denen diese definiert und instanziiert werden und nur die Klassen aktiv lasse in denen die statischen Steuerelemente vorhanden sind (zur Designzeit) läd die Form auch ziemlich schnell, aktiviere ich die Klassen wieder mit den dynamischen Geschichten drin dauert es eine ganze Zeit bis die Form erscheint aber dann halt ohne den dynamischen Inhalt *mecker* Eine Idee wie das klappt das auch dynamische Steuerelemente wie Pictureboxen mit angezeigt werden?
es gibt eigentlich keinen Unterschied im Ladeverhalten des Formulars, wenn es von einem Ribbon bzw. VSTO Add-In aus aufgerufen wird. Was aber entscheidend anders in einem VSTO Add-In ist, dass Du keine Standardinstanz "Form1" hast, bzw. diese Standardinstanz, nichts mit Deiner im Add-In erstellten Instanz zu tun hat. Wenn Du also in Deinem Formular, oder Deinen Klassen auf "Form1" (Bsp. Form1.Controls.Add(...)) zugreifst, um Steuerelemente zu erstellen, werden diese in einer nicht sichtbaren Instanz erstellt, aber nicht in Deinem instantiierten 'frmForm', das Du nach dem Klick auf Deinen Ribbon siehst.
Wäre zumindest eine mögliche Erklärung, aber nur eine Vermutung auf Basis der bisherigen Informationen.
Grundsätzlich kannst Du innerhalb Deines Formulars über das Schlüsselwort "Me" auf die aktuelle Instanz zugreifen. Wenn es weitere Klassen gibt, die ebenso mit dieser Instanz arbeiten sollen, musst Du diesen die Referenz auf diese Instanz übergeben. Für weitergehende Hilfe, müsstest Du dann schon etwas Code zeigen, so dass wir hier die Zusammenhänge nachvollziehen können.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Jan,
ich will Thorsten hier nicht die Butter vom Brot nehmen und überlasse ihm gerne die Antwort.
welche Butter? Ich betrachte es nicht als Exklusivrecht zu antworten, nur weil ich initial auf den Beitrag des Fragestellers geantwortet habe. Jeder darf sich hier beteiligen. Im Fokus steht die Hilfe für den Fragesteller, der seine Frage effizient und sicher auch zeitnah beantwortet sehen möchte.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Public Class Start Public Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim frmMain As New Farben frmMain.Farben() End Sub
Dies ist die Form Load-Klasse. gehört zwar noch bissle mehr zu aber das hat nichts mit dem prob zu tun. Hier wird folgende Klasse aufgerufen:
Public Class Farben Sub Farben() Dim Standart As New StandartFarben.Standartfarben Dim Spezial As New SpezialFarben.SpezialFarben Dim Benutzer As New Benutzerfarben.Benutzerfarben Standart.ColorBoxArray() Spezial.ColorBoxArray() Benutzer.Benutzerfarben() End Sub End Class
Benutzer enthält für den dritten Tab im TabControl statische Controls die auch wie gewünscht angezeigt werden und so funktionieren wie sie sollen. Ein Auszug aus einer der beiden anderen Klassen :
Namespace StandartFarben Public Class Standartfarben Friend ColorBox_Array(29) As System.Windows.Forms.PictureBox Shared Standartfarben() As Color = {Color.Black, Color.DarkGray, Color.Gray, Color.LightGray, Color.DarkBlue, Color.Blue, Color.LightBlue, Color.DarkRed, Color.Red, Color.OrangeRed, _ Color.DarkGreen, Color.Green, Color.LightGreen, Color.DarkCyan, Color.Cyan, Color.DarkMagenta, Color.Magenta, Color.Yellow, Color.LightYellow, Color.Orange, _ Color.Brown, Color.BurlyWood, Color.Violet, Color.DarkViolet, Color.Purple, Color.DeepPink, Color.LightPink, Color.Silver, Color.White, Color.Beige} Public Sub ColorBoxArray() For i = 0 To Standartfarben.Length - 1 Dim Start As New Start ColorBox_Array(i) = New System.Windows.Forms.PictureBox() AddHandler ColorBox_Array(i).Click, AddressOf Color_Array_Click Start.TabPage2.Controls.Add(Me.ColorBox_Array(i)) Start.TabPage2.Controls.AddRange(New System.Windows.Forms.Control() {ColorBox_Array(i)}) Select Case i ... End Select Next End Sub
Aufbau der anderen Klasse ist ähnlich. Habe zum "testen" zwischen end select und dem next mal eine colorbox_array(i).show() ausprobiert, wurde zwar fehlerfrei kompiliert aber steuerelemnte wurden trotzdem nicht angezeigt.
Gruss RL
-
Hallo,
Public Class Start Public Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim frmMain As New Farben frmMain.Farben() End Sub
[...]
For i = 0 To Standartfarben.Length - 1 Dim Start As New Start
An dieser Stelle erstellst Du eine neue Instanz Deines Formulars "Start" (ich empfinde Deine Bezeichner als extremst gewöhnungsbedürftig. 'StartForm' wäre hier eindeutiger). Alles was Du mit dieser Instanz anstellst, hat keine Auswirkung auf die Formularinstanz aus der Du den Aufruf ausführst.
Nur mal ganz grob als eine mögliche Variante:
Public Class Start Public Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim frmMain As New Farben frmMain.Farben(Me) End Sub Public Class Farben Sub Farben(ByVal form As Start) Dim Standart As New StandartFarben.Standartfarben Dim GfK As New GfKFarben.GfKFarben Dim Benutzer As New Benutzerfarben.Benutzerfarben Standart.ColorBoxArray(form) Spezial.ColorBoxArray() Benutzer.Benutzerfarben() End Sub End Class Namespace StandartFarben Public Class Standartfarben Public Sub ColorBoxArray(ByVal form As Start) For i = 0 To Standartfarben.Length - 1 ColorBox_Array(i) = New System.Windows.Forms.PictureBox() AddHandler ColorBox_Array(i).Click, AddressOf Color_Array_Click form.TabPage2.Controls.Add(Me.ColorBox_Array(i)) form.TabPage2.Controls.AddRange(New System.Windows.Forms.Control() {ColorBox_Array(i)}) Select Case i '... End Select Next End Sub End Class End Namespace
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Aaaaahh endlich hat das geklappt. Besten Dank hierfür. Muss zwar nun einiges ergänzen/ändern wo ich statt form Start stehen hab und manche sub's nun umschreiben aber hauptsache es klappt nun. versteh ich das richtig das das (ByVal form ...) der sender ist ? Denn irgendwie klappt nun die ausgabe nicht mehr ... hatte auf den beiden Tab's mit den dynamischen Picturenboxen eine statische picturebox die bei klick auf einer der dynamischen picturebox deren farbe darstellt. die picturebox wird weiterhin angezeigt aber das klicken geht nun nicht mehr.
Private Sub Color_Array_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim i As Integer Dim Start As New Start For i = 0 To ColorBox_Array.Length - 1 Start.pbxVorschauS.BackColor = (ColorBox_Array(i).BackColor) Next Color_Array_Index_Click(sender, e) End Sub Private Sub Color_Array_Index_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Dim Start As New Start Dim Mouse_Click_Color As PictureBox = DirectCast(sender, PictureBox) Start.pbxVorschauS.BackColor = Mouse_Click_Color.BackColor End Sub
und zu guter letzt eine frage noch dazu dann : es ist ja viel im netz beschrieben zu vsto allerdings das meiste für excel
outlook oder access. wie ja bestimmt bemerkt soll dieses addin u.a. text manipulieren (in powerpoint) so wie auch füll-
und rahmenfarbe. ich kann aber nirgends etwas finden wie ich das anstellen kann. also so nach dem motto :
ich erstelle eine folie (kein master) markiere zb. einen text , klicke auf das addin und selectiere daraus eine farbe
, der markierte text nimmt diese farbe an ... oder der hintergrund wird eingefärbt oder oder oder ....
das verhalten soll also explizit zu dem standart-color-dialog von powerpoint identisch sein.
find in der intellisense aber sowas wie worksheet oder workbook nicht, bestimmt heisst das bei PPT anders. hatte es mal
mit den codeschnippseln aus dem vsto-beispiel ribbonx für excel http://msdn.microsoft.com/en-us/magazine/cc163410.aspx
ausprobiert aber da scheitert der menübandrückrüf FillColor ja bereits an sowas wie Application.Selection (Selection ist
kein Member von Application)... und in selber zeile heisst es weiter Excel.Range (kann ich ja für PPT vergessen) genau wie
(Interior.Color = Excel.Constants.xlNone)
Davon abgesehen habe ich dieses beispiel auch mal versucht als Excel addin zu schreiben doch bei der oben genannten
vorlage ist entweder ein fehler oder so:
Public Application As Excel.Application
ribbon.Application = Application
egal wo ich die zweite codezeile in ribbon1.vb hinschreibe es kommt entweder ein fehler während der designzeit oder wenn
da nicht dann beim start von Excel
so der ein oder anderen rat bzw denkanstoss wäre bestimmt hilfreich.
So, genug zugetextet. Ihr sollt euch ja nicht überarbeiten ;)
Danke schon mal im vorraus -
Hallo,
einen kurzen Einstieg in PowerPoint findest du hier: http://msdn.microsoft.com/de-de/library/cc668192.aspx
Die Dokumentation zu PowerPoint ist wie du schon selbst gemerkt hast bezüglich VSTO sehr dürftig. Wie aber auch in http://msdn.microsoft.com/de-de/library/bb772069.aspx erwähnt, ist die Vorgehensweise unter VSTO fast identisch mit der von VBA. Als Referenz kannst du daher die gut dokumentierte Referenz von VBA für PowerPoint heranziehen.
@Thorsten: Ich sehe das so wie du, einige sehen das leider anders und fühlen sich auf den Schlips getreten...
Viele Grüße
Jan
- Bearbeitet Jan Tittel Donnerstag, 19. August 2010 16:34 Fehler
-
viele der befehle sind ja nicht nach vb.net übertragbar, da wäre zB das Schlüsselwort SET. Hab ich das richtig verstanden das Set in VBA gleichbedeutend ist mit der Objektzuweisung ... also zb
SET Variable A = OBJEKT B 'VBA
gleichbedeutend mit
Dim Variable A AS NEW Objekt B 'VB.Net
Man kann zwar VBA importieren aber trotz dessen keine "alten" vba befehle nutzen
-
Hallo,
das Schlüsselwort 'Set' ist in VB.NET obsolet. In VBA musste man Set in Verbindung mit Objektreferenzen verwenden. Da in VB.NET alles ein Objekt ist, wird daraus eine einfache Zuweisung:
Du kannst alle Befehle nutzen, die die Objektmodelle von Word, Excel und PowerPoint bereitstellen. Für die reinen VBA Befehle gibt es meist Ersatz in den vielen Klassen des .NET Framework, wenn es nicht von VB selber bereitgestellt wird. Es sind aber grundsätzlich zwei verschiedene Welten mit denen Du da zu tun hast.'VBA Dim foo As ClassA Dim bar As ClassA Set foo = New ClassA Set bar = foo ' In VB.NET wird daraus: Dim foo As New ClassA() bar = foo
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Thorsten,
ich merk das schon. Vor Verzweiflung beiss ich schon fast in meine Tastatur. für vb.net zu C# (und umgekehrt) gibts ja wenigstens Converter die es etwas vereinfachen den code umzuwandeln aber von vba zu vb.net gibts nix.
Hast du dir mal das Beispiel für excel und ribbonX auf http://msdn.microsoft.com/en-us/magazine/cc163410.aspx angeschaut? habe es versucht nachzucoden (für excel....für ppt muss ich mir was einfallen lassen wegen der beiden rückrufprozeduren mit verweis auf excel) aber vs2010 meckert irgendwann immer rum wegen der anweisung ribbon.application = application. wo bitte soll ich das hinsetzen. zur entwicklungszeit kommt entweder application ist kein member von ribbon oder dekleration erwartet (ribbon unterringelt) wenn ich dann mal eine position gefunden habe wo vs nicht meckert gibts einen laufzeitfehler. verrat mir bitte mal wo das hin muss, dann kann ich das vielleicht irgendwie auf ppt umcoden, wenn ich dann auch schauen muss wie ich die anweisungen zB das die farbe übernommen wird auff die slides in ppt umsetzen kann
Wäre nett wenn du noch bei der Umsetzung bei folgender Sache behilflich sein könntest. Wenn ich bei dem Addin welches eine Palette mit speziellen Farben aufruft auf eine der Farben klicke wird ja über die xml eine rückrufsub aufgerufen in ribbon1.vb. irgendwie bekomm ich das nicht auf die reihe das diese rückruf-sub dann auch zB die Schriftfarbe ändert oder den hintergrund(also die Folie)
Dim App As New PowerPoint.Application Dim Workbook As PowerPoint.Presentation Dim Folie As PowerPoint.Slide Dim shap As PowerPoint.Shape
hab in der ribbon1.vb ein Array mit den farben erstellt
Privat Benutzerfarben as new color() = {color.FromArgb(123.123.123.123).......}
Die Rückruffprozedur :
Privat Sub WechselFarbe(ByVal control As Office.IRibbonControl, ByVal selectedId As String, ByVal index As Integer) end Sub
irgendwie sind viele parameter wie .Font readonly. komme absolut nicht weiter und die vba-referenz ist da nicht wirklich eine hilfe. wie greif ich auf die Schrift, hintergrund etc. in ppt zu?
-
Soooo, nach langen Nächten am Wochenende und viel Probiererei und noch mehr Kaffee hab ich zumindest eine Sache gelöst bekommen.
Über ActiveWindow.Selection.TextRange.Font lassen sich diverse Einstellungen der Schrift manipulieren. Was mir aber nun fehlt in den "Optionen" wie .size und .name ist eine Option zum einstellen der Schrifthintergrundfarbe. Die eigentliche Schriftfarbe lässt sich ja über color.rgb manipulieren allerdings scheint es keine Möglichkeit zu geben deren Hintergrund zu manipulieren (nicht Hintergrund des shapes/slides sondern so wie ein texthighlighting, also nur direkt hinter dem text/wort/zeichen).
Hat einer vielleicht eine Idee dazu?
-
Hallo,
das Range-Objekt hat eine Eigenschaft "HighlightColorIndex". Damit lässt sich das einstellen. Siehe http://msdn.microsoft.com/en-us/library/ff841064.aspx.
Leider verfügt das Range-Objekt der PIA nicht über diese Eigenschaft. Du musst also um das verwenden zu können, einen Verweis auf die COM-Komponente hinzufügen.
Falls das keine Option ist, könntest du noch das XML der Datei untersuchen und gucken, welches Attribut dafür zuständig ist, und dieses entsprechend ändern.
Viele Grüße
Jan
-
Das mit dem Range-Objekt hatte ich schon mal probiert, aber irgendwie gibt es das wohl nur für word .... in ppt gibt es nur textrange sliderange und shaperange...und bei denen leider unter selection kein highlight-property
oder muss ich zuvor in den imports die word-optionen einbinden damit ich auf wd zugreifen kann und die highlight-propertys habe?
-
Hallo,
ja, mein Fehler, bin von Word ausgegangen, da ich das auch nur von da her kenne. In PowerPoint finde ich diese Möglichkeit nicht mal in der Oberfläche...
Vielleicht kannst du ja mit dynamischen Textfeldern arbeiten und deren Hintergrundfarbe entsprechend festlegen. Der Aufwand ist aber hoch, da dann eine Logik programmiert werden muss für die Positionierung etc.
Du könntest natürlich auch einzig zu diesem Zweck ein Word-Dokument über OLE einbinden... Das ist aber sicherlich auch nicht für jede Umgebung eine geeignete Lösung.
Vielleicht habe ich ja auch etwas übersehen und es gibt doch eine einfache Lösung. Mal sehen, ob Thorsten etwas einfällt.
Viele Grüße
Jan
-
Hallo,
das muss ich mir noch schwer überlegen ob ich mir diesen Aufwand machen werde, hab ja jetzt schon ____ an den Fingerkuppen.
Irgendwie ist PPT komisch. Über ActiveWindow.Selection.TextRange.Font hab ich Zugriff auf die Propertys für die Schrift, mit .SpaeRange.Fill zB auf die Box in der die Schrift ist aber mit .SlideRange.Background.Fill kann ich scheinbar nicht die Folie selber verändern:
with .SlideRange.Background.Fill
.BackColor.RGB = RGB(123,123,123)
.ForeColor.RGB = RGB(10,10,10)
End With
funktioniert zwar, wird fehlerfrei kompiliert und ausgeführt, wende ich es in PPT an sagt mit PPT beim Schliessen auch das die Folie verändert wurde aber ich habe keinen optischen Effekt. Also keine Farbänderung (zumindest nicht sichtbar). Wie kann das sein bzw hab ich was übersehen oder falsch gemacht dabei? Oder manipulier ich damit gar nicht an der Folienfarbe?
Grüßle