Seite 1 von 3
[Gelöst] List Box über Makro ansprechen/Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 12:03
von CamuelSpenser
Hallo erstmal, bin neu hier im Forum und komm schon mit ner Frage daher >.<
ich weiss kommt net gut so direkt mit ner Frage daher zukommen aber bin kompletter neuling wenn es um OOo Basic geht...
Bitte darum vielmals zu entschuldigen, wenn iwelche "dummen" Fragen von mir kommen...
So hab nämlich ein grosses Problem, hab im M$ Excel VBA meine Makros geschrieben und muss nun,
eine OpenOffice Version von meinem Dokument machen... dies erweist sich jedoch schwieriger als ich es mir vorgestellt habe ... :S
Zum einen kann ich die meisten meiner Befehle aus Excel-VBA jetzt aufn Scheiterhaufen verbannen =/
Bei Excel gings ja relativ einfach um List Box'en (resp. Drop Down Listen) anzureden um Informationen rauszubekommen und eventuell die Listen auch zu befüllen...
Shapes("xxxx").ControlFormat.ListIndex = 1 ?
Shapes("xxxx").ControlFormat.ListFillRange = $A$2:$A$55
usw...
Versuch mich jetzt seit über ner Woche dran hab etliche Foren durchkämmt und Google Overuseed... aber ohne iwie aufn grünen Zweig zu kommen...
Hoffe ihr könnt mir dabei eventuell Helfen...
M$ VBA - Makro :
Code: Alles auswählen
Sub Zonecombinée14_QuandChangement()
Dim X, Y As Integer
' Nach der Wahl der Granitstärke nur die Anzeigen die in der geählten Stärke existieren
' Bsp . 12mm -> $A$2:$A$26
Select Case Right(Application.Caller, 2)
Case 14: X = 14: Y = 121
Case 60: X = 60: Y = 59
Case 18: X = 18: Y = 17
Case 19: X = 19: Y = 230
Case 20: X = 20: Y = 231
Case 21: X = 21: Y = 232
End Select
If Sheets("Bestellformular").Shapes("Drop Down " & X).ControlFormat.ListIndex = 1 Then Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListFillRange = "HILFSTABELLE!$A$2"
If Sheets("Bestellformular").Shapes("Drop Down " & X).ControlFormat.ListIndex = 2 Then Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListFillRange = "HILFSTABELLE!$A$2:$A$26"
If Sheets("Bestellformular").Shapes("Drop Down " & X).ControlFormat.ListIndex = 3 Then Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListFillRange = "HILFSTABELLE!$B$2:$B$54"
If Sheets("Bestellformular").Shapes("Drop Down " & X).ControlFormat.ListIndex = 4 Then Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListFillRange = "HILFSTABELLE!$C$2:$C$69"
If Sheets("Bestellformular").Shapes("Drop Down " & X).ControlFormat.ListIndex = 5 Then Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListFillRange = "HILFSTABELLE!$D$2:$D$44"
Sheets("Bestellformular").Shapes("Drop Down " & Y).ControlFormat.ListIndex = 1
End Sub
Dies soll bezwecken, dass wenn eine bestimmte Stärke ausgewählt wurde, die Dazugehörigen Granitarten angezeigt werden, welche in dieser Stärke verfügbar sind ...
X bezieht sich auf die Aufrufende Liste
Y bezieht sich auf die zu füllende Liste
Die Daten mit denen die Listen gefüllt werden befinden sich auf einem Separaten Sheet im selben Dokument.
Würde mich sehr über Hilfe diesbezüglich freuen..
Danke im Vorraus
Lg aus Luxemburg

Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 13:45
von balu
Hallo CamuelSpenser,
Willkommen im Forum!
ich weiss kommt net gut so direkt mit ner Frage daher zukommen
Warum nicht? Ist doch voll normal

.
Zum einen kann ich die meisten meiner Befehle aus Excel-VBA jetzt aufn Scheiterhaufen verbannen =/
Das ist wohl wirklich Schade, aber damit muss man leben.
Versuch mich jetzt seit über ner Woche dran hab etliche Foren durchkämmt und Google Overuseed
Tja, und wenn man nicht die richtigen Suchbegriffe für Star-Basic kennt, hört das Suchen nimmer auf.
Also, als erstes solltest Du mal die Seiten von
Michael Dannenhoefer besuchen. Und dort dein Augenmerk auf die
Kontrollfelder richten. Für deinen Fall wäre jetzt da besonders das Thema:
Welches sind die Besonderheiten von Listboxen interessant.
Und wenn ich mir deinen Code so anschaue, würde ich dir empfehlen das ganze zu kürzen. Ist noch nicht so lange her da hatte unser Moderator Stephan jemand anderem Kürzungsvorschläge unterbreitet, nachzulesen
hier. Wäre für dich bestimmt auch interessant.
Vielleicht wäre
dieser Link auch noch was für dich. Da geht es auch um das befüllen von Listboxen.
Und nun viel Spaß beim Üben und Experementieren

.
Gruß
balu
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 15:16
von CamuelSpenser
Erstmal vielen Dank für deine schnelle Antwort..
hatt mich schon was weitergebracht, in Sachen befehle habe ich mich schon etwas eingelen..
jedoch gelingt es mir nicht die genaue herangehensweise herauszufinden wie das funktionniert mitm deklarieren und ansprechen von Objekten. :S
Ich verzweifel schon an der einfachsten Aufgabe hier..
hab jetzt etliche Möglichkeiten durch, leider ohne Erfolg
Versuche jetzt zu Testzwecken das Makro dazu zu bewegen mir in einer MSGBOX() das ausgewählte Item auszugeben..
Die meisten der Möglichkeiten führten dazu, dass ich ne leere Box da hatte wo nix drin stand, obwohl ich vermutet habe dass es so sein müsste.. nun gut hab nun weitergeschaut und versucht aber ich weiss nicht mal ob ich es richtig mache :s
Die ListBoxen befinden sich auf dem Sheet Bestellformular, habe mit diversen möglichkeiten wie hier mein letzter Versuch zeigt
Code: Alles auswählen
oForm = ThisComponent.DrawPage.Forms.GetByName("Bestellformular")
oListBox = oForm.GetByName("List Box 7")
DocCrl = ThisComponent.getCurrentController()
CtlView = DocCrl.GetControl(oListBox)
msgbox(CtlView.SelectedItem)
Hab gehofft würd allmählich ma durchblicken aber Fehlanzeige nun bekomm ich nen BASIC-RunTimeError, Eigenschaft oder Methode "DrawPage" nicht gefunden :S
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 15:20
von Mephisto
Wenn ich dich richtig Verstehe, ist dein Drop-Down Menü in einer Zelle.
Warum liest du nicht einfach deine Zelle aus?
Code: Alles auswählen
IF thisComponent.Sheets(0).getCellRangeByName("A1").String = 1 THEN
(...)
END IF
Mein Drop-Downmenü hab ich folgendermaßen erstellt: (codeausschnitt von mir für einen anderen Zweck)
Code: Alles auswählen
FUNCTION createBrandDropDownMenu(rowNumber as Integer)
Dim inputSheet
Dim CellRange
Dim Validation
inputSheet = thisComponent.Sheets(1)
CellRange = inputSheet.getCellRangeByName("H4:H" & rowNumber)
Validation = CellRange.Validation
With Validation
.Type = com.sun.star.sheet.ValidationType.LIST
.ShowErrorMessage = True
.ErrorMessage = "ERROR:" & CHR$(10) & "You have to choose value from the list!"
.ErrorTitle = "ERROR"
.ShowInputMessage = True
.InputTitle = "Select Brand:"
.InputMessage = "Take a value from the list"
.ErrorAlertStyle = com.sun.star.sheet.ValidationAlertStyle.STOP
.setOperator com.sun.star.Sheet.ConditionOperator.EQUAL
.setFormula1 """Eintrag1"";""Eintrag2"";""Eintrag3"";""Eintrag4"";""Eintrag5"";""Eintrag6"";""Eintrag7"""
End With
CellRange.Validation = Validation
END FUNCTION
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 15:25
von CamuelSpenser
Hallo Mephisto,
hab mich vllt. etwas Falsch ausgedrückt gehabt, im M$ Excel sind die DropDown's etwa gleichzusetzen mit den ListBox bzw ComboBox im OpenOffice...
und dies bringt mich schier zum verzweifeln weil ich es nicht mal fertig bekomme ne ListBox per Makro anzusprechen :s
Bin vllt doch zu blöd um Makros in OpenOffice hinzukriegen, zumal ich etwas unter Zeitdruck stehe und sich meine Herangehensweise an diese Problem vlt nicht ganz "Sauber" ist?
Lg
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 15:48
von Mephisto
Ich versteh zwar grad nicht ganz den Unterschied, den du mir erklähren willst, aber selbst wenn es einen gibt.
was spricht gegen meine Variante? Hast du die schonmal ausprobiert?
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 16:02
von CamuelSpenser
Spricht eigentlich nix gegen deine Variante, nur Problem ist Cheff will unbedingt ListBox und CheckBox etc.. im Formular haben eben genauso wie es auch im M$-Excel aussieht und da da alles funktionniert soll ich dass alles so auch OpenOffice übertragen, damit wir den Kunden das Leben so einfach und gemütlich wie möglich machen können und so... nja wie die halt so sind..
Das grösste Problem was ich jetzt grad hab ist, dass ich diese ListBox net anreden kann, resp. hab 0 Ahnung wie ich das Bewerkstelligen soll :s
Edit 1 :
So nach etlichem hin und her hab ich es nun hinbekommen die Position des ausgewählten Eintrags herauszubekommen (und auch die LB anzureden)
mein aktueller Code s ieht in etwa so aus :
Code: Alles auswählen
Sub Staerke_Change()
Dim X,Y,oPos as Integer
dim oDocument, oSheet, oDraw, oForm, oControler as Object
dim oListe, oListe2, oListBox, oListBox2 as Object
oDocument = StarDesktop.CurrentComponent
oSheet = oDocument.Sheets.GetByName("Bestellformular")
oDraw = oSheet.DrawPage
oForm = oDraw.Forms.GetByIndex(0)
oControler= oDocument.GetCurrentController
oListe = oForm.GetByName("List Box 7")
oListBox = oControler.GetControl(oListe)
oPos = oListBox.SelectedItemPos
If oPos = 1 Then
oListe2 = oForm.GetByName("List Box 14")
oListBox2 = oControler.GetControl(oListe2)
msgbox(oListBox2.SelectedItemPos)
End If
End Sub
Kann sicher noch gekürzt werden aber so auf die schnelle und als neuling kann man ma n Auge zudrücken nun jedoch versuch ich verzweifelt den Befehl zu finden wie ich die DataCellRange bei der zweiten ListBox ersetzen kann?
LG Camuel
Edit 2 :
Habs jetzt versucht mit :
Code: Alles auswählen
If oPos = 1 Then
oListe2 = oForm.GetByName("List Box 14")
oListBox2 = oControler.GetControl(oListe2)
oListBox2.Model.StringItemList() = "HILFSTABELLE.$A$2:$A$26"
End If
Bekomme jetzt nur nen BASIC-Laufzeitfehler : Objektvariable nicht belegt.. aber keine Ahnung welche Variable er nun wieder meint?

Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Mo, 19.12.2011 19:27
von balu
Hallo CamuelSpenser,
Es ist eine bodenlose Frecheit von dir mitten im Verlauf des Threads hier noch in einem anderem Forum das gleiche Problem zu posten! Crossposting ist schon schlimm genug. Aber so etwas wie jetzt setzt allem die Krone der Frechheit auf.
Übrigens! Hättest Du dir die Seite vom Dannenhoefer genauer angeschaut, was ja wohl kein Problem darstellen soll, wärst Du bei dem Problem mit "Objektvariable nicht belegt" schon weiter.
Mir bleibt jetzt nur noch eins. Ich kann und werd jetzt meine Bemühungen dir zu helfen natürlich mit sofortiger Wirkung einstellen.
Gruß
balu
Edith
Link zu dem anderen Forum von mir entfernt.
Heut wohl nicht mehr, aber morgen sehn wir dann hier weiter. Werde dann zumindest teilweise weiterhelfen, so weit ich kann.
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 00:21
von balu
Hallo CamuelSpenser,
Bekomme jetzt nur nen BASIC-Laufzeitfehler : Objektvariable nicht belegt.. aber keine Ahnung welche Variable er nun wieder meint?
Wen Du noch an Lösungen zu deinem Problem interessiert bist, dann teile uns doch mal bitte genau mit wo Du die Fehlermeldung bekommst. Calc markiert ja im Makro die jenige Zeile wo der Fehler auftritt. Und genau diese Zeile musst Du uns mitteilen. Am besten in der Sub die Du hier postest.
Was natürlich noch schöner wäre, wenn Du zusätzlich eine Beispieldatei hier anhängst.
Gruß
balu
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 10:27
von Mephisto
Es empfiehlt sich ganz am Anfang eines jeden Makros folgende Anweisung mit aufzunehmen:
Diese Option ist sehr hilfreich beim debuggen. Mit dieser Option bekommt man genau den Fehler, den du beschreibst, wenn eine Variable nicht definiert ist. Hilfreich ist es vor allem in folgender Situation:
Code: Alles auswählen
Dim Buchstabendreher as String
Buchstabendreher = "Hello world!"
print Buchstbaendreher ' <-- hier wird er meckern: "Objektvariable nicht belegt"
Edit:
Erschwerend kommt natürlich noch hinzu, dass das Dokument noch nicht abgespeichert ist. Mein 'Unbenannt 1' kann ich also nicht über eine URL ansprechen...
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 12:04
von CamuelSpenser
@ balu : Entschuldige vielmals bitte, hab den Post sofort gelöscht danach... :s
also weiter bin ich nu noch net gekommen mein Code sieht momentan so aus :
Code: Alles auswählen
Option Explicit
Sub Staerke_Change()
Dim X,Y,oPos as Integer
dim oDocument, oSheet, oDraw, oForm, oControler as Object
dim oListe, oListe2, oListBox, oListBox2 as Object
globalscope.BasicLibraries.LoadLibrary("Tools")
DialogLibraries.LoadLibrary("Standard")
oDocument = StarDesktop.CurrentComponent
oSheet = oDocument.Sheets.GetByName("Bestellformular")
oDraw = oSheet.DrawPage
oForm = oDraw.Forms.GetByIndex(0)
oControler= oDocument.GetCurrentController
oListe = oForm.GetByName("List Box 7")
oListBox = oControler.GetControl(oListe)
oPos = oListBox.SelectedItemPos
If oPos = 1 Then
oListe2 = oForm.GetByName("List Box 14")
oListBox2 = oControler.GetControl(oListe2)
oListBox2.StringItemList() = "HILFSTABELLE.$A$2:$A$26"
End If
End Sub
Die Fehlermeldung bekomm ich in dieser Zeile :
Code: Alles auswählen
oListBox2.StringItemList() = "HILFSTABELLE.$A$2:$A$26"
Da sagt er mir dass es StringItemList() nicht gibt.. diese wird aber auch von den OpenOffice Makros benutzt..
Hatte auch den Versuch mit EmptyList() getestet jedoch auch diese war ihm nicht bekannt. :s
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 12:14
von Mephisto
Wenn ich das richtig sehe erwartet die Funktion ein String-Array als übergabewert. Du übergibst aber nichts.
Schau dir das hier mal an
http://wiki.services.openoffice.org/wik ... ment_Forms
probier mal was in die Richtung:
Code: Alles auswählen
meinArray(0) = "HILFSTABELLE.$A$2:$A$26"
oListBox2.StringItemList( meinArray() )
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 12:23
von DPunch
Aloha
Mephisto hat geschrieben:probier mal was in die Richtung:
Unwahrscheinlich, dass das funktioniert, .StringItemList ist keine Funktion, die einen Parameter erwartet.
Der Fehler ist folgender:
Code: Alles auswählen
oListe2 = oForm.GetByName("List Box 14")
oListBox2 = oControler.GetControl(oListe2)
REM oListBox2.StringItemList() = "HILFSTABELLE.$A$2:$A$26" <---- StringItemList ist ein Attribut des Listbox-!Models!
REM http://api.openoffice.org/docs/common/ref/com/sun/star/awt/UnoControlListBoxModel.html
oListe2.StringItemlist = Array("HILFSTABELLE.$A$2:$A$26")
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 13:07
von Mephisto
DPunch hat geschrieben:
Unwahrscheinlich, dass das funktioniert, .StringItemList ist keine Funktion, die einen Parameter erwartet.
Schau dir mal meinen Link an!
StringItemList (Array of Strings)
list of all entries
Re: List Box über Makro ansprechen und Ausgabe verarbeiten?
Verfasst: Di, 20.12.2011 13:32
von DPunch
Aloha
Mephisto hat geschrieben:Schau dir mal meinen Link an!
Dein Link gibt mir Recht.