Seite 1 von 1

CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: So, 27.05.2012 15:11
von witchcorp
Hallo zusammen,
ich habe für mich und meine Kollegen ein Formular zur Vereinfachung von Therapiedokumentationen entworfen. Dabei habe ich bisher mit Kombinationsfeldern gearbeitet. Jetzt kam der Wunsch nach einer Mehrfachselektion auf. Das geht meines Wissens nach nur mit Listenfeldern. Es ist mir auch gelungen in das Formular ein Listenfeld mit Mehrfachselektion einzubauen und mit den gewünschten Werten zu füllen. Woran ich leider scheitere ist der Übertrag der ausgewählten Werte in die entsprechende Zelle. Ein einfaches Umschreiben des Macros wo ich Combobox mit Listbox ersetzt habe funktioniert nicht. Er gibt als Fehlermeldung "Eigenschaft oder Methode nicht gefunden: text" zurück. Ich kopiere mal das ursprüngliche Macro, dass mit den Kombinationsfelder wie gewünscht funktioniert hier rein.

Code: Alles auswählen

Private Sub OKButton_Click()
Dim art As String
DIM dat As Date
DIM beschr As String
DIM oCell as Object
Dim oDoc As Object 
Dim oSheet As Object 
Dim oForm As Object 
Dim oComboBox As Object
Dim oDateField As Object
Dim lauf as Variant
oDoc = ThisComponent     
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oDateField = oform.getByName("oDateFieldDatum")
dat = CDateFromIso(oDateField.date)   
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung")
beschr = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung2")
beschr2 = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung3")
beschr3 = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung4")
beschr4 = oComboBox.text
oDocument=ThisComponent
oSheet=oDocument.Sheets.getByName("Verlaufsdokumentation")
Cursor = oSheet.createCursor() 
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.String = beschr
oCell=oSheet.getCellByPosition(1, Zeile+2) 
oCell.String = beschr2
oCell=oSheet.getCellByPosition(1, Zeile+3) 
oCell.String = beschr3
oCell=oSheet.getCellByPosition(1, Zeile+4) 
oCell.String = beschr4
End Sub
Über etwas Unterstützung durch die Könner würde ich mich sehr freuen.
Bianca Orth



Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; CODE tags gesetzt

Re: Listenfeld mehrere selektierte Werte in 1 Zelle schreibe

Verfasst: So, 27.05.2012 15:32
von Eddy
Hallo witchcorp,

seit 2004 im Forum unterwegs, und das Unterforum OOo Basic und Java noch nicht entdeckt?
witchcorp hat geschrieben:Über etwas Unterstützung durch die Könner würde ich mich sehr freuen.
Bitte frage im entsprechenden Unterforum.

Re: Listenfeld mehrere selektierte Werte in 1 Zelle schreibe

Verfasst: So, 27.05.2012 20:40
von witchcorp
Hallo Eddy ich bin Logopädin und nicht permanent im Forum unterwegs, aber danke für den Hinweis.
Bianca

Listenfeld mehrere selektierte Werte in 1 Zelle schreiben

Verfasst: So, 27.05.2012 20:42
von witchcorp
So, dann nochmal im richtigen Forum und jetzt hoffentlich im richtigen Format
Hallo zusammen,
ich habe für mich und meine Kollegen ein Formular zur Vereinfachung von Therapiedokumentationen entworfen.
Dabei habe ich bisher mit Kombinationsfeldern gearbeitet.
Jetzt kam der Wunsch nach einer Mehrfachselektion auf.
Das geht meines Wissens nach nur mit Listenfeldern.
Es ist mir auch gelungen in das Formular ein Listenfeld mit Mehrfachselektion einzubauen
und mit den gewünschten Werten zu füllen.
Woran ich leider scheitere ist der Übertrag der ausgewählten Werte in die entsprechende Zelle.
Ein einfaches Umschreiben des Macros wo ich Combobox mit Listbox ersetzt habe funktioniert nicht.
Er gibt als Fehlermeldung "Eigenschaft oder Methode nicht gefunden: text" zurück.
Ich kopiere mal das ursprüngliche Macro, dass mit den Kombinationsfelder wie gewünscht funktioniert hier rein.

Code: Alles auswählen

Private Sub OKButton_Click()
Dim art As String
DIM dat As Date
DIM beschr As String
DIM oCell as Object
Dim oDoc As Object 
Dim oSheet As Object 
Dim oForm As Object 
Dim oComboBox As Object
Dim oDateField As Object
Dim lauf as Variant
oDoc = ThisComponent     
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oDateField = oform.getByName("oDateFieldDatum")
dat = CDateFromIso(oDateField.date)   
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung")
beschr = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung2")
beschr2 = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung3")
beschr3 = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxBeschreibung4")
beschr4 = oComboBox.text
oDocument=ThisComponent
oSheet=oDocument.Sheets.getByName("Verlaufsdokumentation")
Cursor = oSheet.createCursor() 
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.String = beschr
oCell=oSheet.getCellByPosition(1, Zeile+2) 
oCell.String = beschr2
oCell=oSheet.getCellByPosition(1, Zeile+3) 
oCell.String = beschr3
oCell=oSheet.getCellByPosition(1, Zeile+4) 
oCell.String = beschr4
End Sub
Über etwas Unterstützung durch die Könner würde ich mich sehr freuen.
Bianca Orth

Re: CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: Mi, 30.05.2012 12:51
von witchcorp
Hallo zusammen,
ich habe an dem Code nochmal weitergearbeitet. Er läuft jetzt durch bis zu dem Punkt,
an dem er die Werte aus der Listenbox in die Zelle eintragen soll.
Fehlermeldung "Objektvariable nicht belegt" die letzte Zeile ist markiert.
Was mache ich falsch?
Hier der neue Code:

Code: Alles auswählen

REM  *****  BASIC  *****
Option Explicit
Private Sub OKButton_Click()
DIM dat As Date
DIM liste (6) As String
DIM oCell as Object
Dim oDoc As Object 
Dim oSheet As Object 
Dim oForm As Object 
Dim oComboBox As Object
Dim oListBox As Object
Dim oDateField As Object
DIM cursor As Object
DIM Zeile As Integer
oDoc = ThisComponent     
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oDateField = oform.getByName("oDateFieldDatum")
dat = CDateFromIso(oDateField.date)   
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oListBox = oform.getByName("oListBox")
liste = oListBox.SelectedItems()
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Verlaufsdokumentation")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.string = liste
End Sub
Hat jemand eine Idee?
Gruß
Bianca

Re: CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: Mi, 30.05.2012 13:07
von Stephan
Was mache ich falsch?
Du verwendest im neuen Code:

Code: Alles auswählen

Option Explicit
was für das Programm die Aufforderung ist nur Variablen zu aktzeptieren die deklariert wurden, verzichtest aber darauf die Variable oDocument zu deklarieren, z.B. mittels:

Code: Alles auswählen

Dim oDocument As Object 




Gruß
Stephan

Re: CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: Mi, 30.05.2012 13:48
von witchcorp
Hallo Stephan,
AHA, das meint also Option explicit. Ich dachte das wäre so eine Art Fehlersuche.
Ich habe nun alle Variablen deklariert. Das hatte sich etwas mit deiner Antwort übschnitten.
Der Code läuft jetzt durch bis zur Schlusszeile. Ich habe meinen Beitrag oben geändert,
da jetzt nur noch die Schlusszeile Ärger macht. Leider entscheidend, da das Eintragen der Werte
das Ziel der ganzen Aktion ist.
Viele Grüße und Danke
Bianca

Re: CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: Mi, 30.05.2012 15:09
von witchcorp
Hallo zusammen,
eine Möglichkeit 1 Wert aus dem Listenfeld in eine Zelle zu schreiben,
habe ich jetzt gefunden. Wie aber mehrere? Wenn ich in meiner Tabelle
Mehr als einen Wert im Listenfeld markiere trägt er immer nur den ersten Wert ein.

Code: Alles auswählen

Sub Macro1
Dim oForm as Object, oList as Object
Dim oListCtr as Object, oTextCtr as String, oPosCtr as String
 
oDoc = ThisComponent     
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oList = oForm.getByName("oListBox")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr = oListCtr.SelectedItem
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Verlaufsdokumentation")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.string = oTextCtr
End Sub
Was fehlt noch, damit es klappt?
Gruß
Bianca

Re: CALC: Listenfeld, Mehrfachselektion in 1 Zelle schreiben

Verfasst: Mi, 30.05.2012 20:06
von witchcorp
Hallo zusammen,
habs hinbekommen. Folgender Code löst das Problem.

Code: Alles auswählen

REM  *****  BASIC  *****


Sub Macro1
Dim oForm as Object, oList as Object
Dim oListCtr as Object, oTextCtr as String, oPosCtr as String
 
oDoc = ThisComponent     
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oList = oForm.getByName("oListBox")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr=""
   For I=0 to UBound(oListCtr.SelectedItems)
      If oTextCtr<>"" then oTextCtr=oTextCtr & ","
      oTextCtr=oTextCtr & oListCtr.SelectedItems(I)
Next I 
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Verlaufsdokumentation")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.string = oTextCtr
End Sub
Ergebnis die gewählten Items werden mit Komma getrennt in die Zelle eingetragen.
Viele Grüße und Dank an die Helfer
Bianca