Inputbox - Eingabe in eine bestimmte Zelle in Calc einfügen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

cldi
*
Beiträge: 11
Registriert: Do, 09.11.2006 18:02

Inputbox - Eingabe in eine bestimmte Zelle in Calc einfügen

Beitrag von cldi »

Hallo,

ich will die Eingabe von einer Inputbox in eine bestimmte Zelle in Calc reinschreiben.

Der Name bzw. der Inhalt meiner Variable sName soll in das erste Sheet in die Zelle E6 geschrieben werden, ich scheiter aber leider an der richtigen Methode. Leider ist setContent falsch.

Mein bisheriger Code:

Code: Alles auswählen

Sub Name

Dim sName As String
Dim oBereich As Object

 sName=Inputbox("Bitte Vor- und Nachname eingeben", "Name eingeben")

 rem print sName

oDoc = thisComponent
oBereich = oDoc.sheets(0).getCellRangeByName("E6:E7")
oBereich.setContent(sName)

End Sub
Welche Methode zum setzen des Inhalts könnte noch in Frage kommen?

Vielen Dank für die Hilfe
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

"Name" als Namensbezeichnung einer Sub ist falsch, weil 'Name' ein Basic-befehl ist.

Code: Alles auswählen

Sub NamenEinfuegen

Dim sName As String
Dim oZielzelle As Object

 sName=Inputbox("Bitte Vor- und Nachname eingeben", "Name eingeben")

 rem print sName

oDoc = thisComponent
oZielzelle = oDoc.sheets(0).getCellRangeByName("E6") 'Dein Bereich ist nicht größer!
oZielzelle.string = sName    'für Text
'oZielzelle.value =           'Verwendung bei Zahlenwerten
'oZielzelle.formula =        'um Formeln als solche zu definieren

End Sub
ich hab obereich durch oZielzelle ersetzt(nur für die Lesbarkeit)

Gruß Karo
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo karo,

wahrscheinlich will clidi, dass der wert in dem kompletten bereich und nicht wie bei dir in einer zelle eingetragen wird. geht das?

grüße

klaus
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Klaus
Natürlich geht das, nur seine usprüngliche Frage war :
ich will die Eingabe von einer Inputbox in eine bestimmte Zelle in Calc reinschreiben
Dahingehend hab ich den Code korrigiert.

Gruß Karo
cldi
*
Beiträge: 11
Registriert: Do, 09.11.2006 18:02

Beitrag von cldi »

Hallo,

vielen Dank für den ausführlichen Code, es ist genau so wie ich es wollte und hat mir somit sehr geholfen.

Des mit einer Zelle passt schon, hatte nur ein Beispiel aus einem Buch genommen, da ich ja schon verschiedene Methoden ausprobiert hatte.

Ich bräuchte nocheinmal einen Lösungsvorschlag.

Wie könnte den das Makro entweder

a) automatisch ausgeführt werden d.h. sobald man auf E6 klickt soll das Makro ausgeführt werden bzw. die InputBox erscheinen

b) als Alternative über einen Button
wie ich eine Schaltfläche über einen Dialog erstell weiss ich, aber nicht wie ich dann nur die Schaltfläche in Calc einbette. (habe ich leider nicht rausfinden können, auch nicht über die Suchfunktion des Forums)

Über eine Symbolleiste will ich es nicht machen (aber des wüsste ich wenigstens wie es geht *lol*)

Wäre um eine nochmalige Hilfe sehr dankbar.

cldi
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

]
b) als Alternative über einen Button
aus dem Tabellenblatt heraus :
->Ansicht ->Symbolleisten ->Formular-Steuerelmente
den Rest prinzpiell ganz ähnlich wie beim Dialogentwurf.

Gruß Karo
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo karolus,
Natürlich geht das,
kannst du mir sagen wie ich werte in einen zellbereich kpl. einsetzen kann?

freue mich auf deine antwort

grüße

klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey cldi,
a) automatisch ausgeführt werden d.h. sobald man auf E6 klickt soll das Makro ausgeführt werden bzw. die InputBox erscheinen
Dafür müsstest du einen "Listener" schreiben, der auf Mausklicks bzw. das Aktivieren einer Zelle reagiert. Sehr kompliziert, nicht empfehlenswert.
b) als Alternative über einen Button
wie ich eine Schaltfläche über einen Dialog erstell weiss ich, aber nicht wie ich dann nur die Schaltfläche in Calc einbette
Über ein Formular. Dazu aktivierst du zuerst die Symbolleisten "Formularentwurf" und "Formularsteuerelemente" (über Ansicht - Symbolleisten) und fügst dann (im Entwurfsmodus) einen Button ins Calc-Sheet ein - geht wie bei Dialogen auch ;-)
Über das Kontextmenü öffnest du die Eigenschaften - und dort weist du dem Ereignis "beim Auslösen" dein Makro zu.

Nun weiss ich ja nicht, welche Gesamtapplikation du endgültig vorhast, aber wäre nicht möglicherweise deine ganze Aktion direkt mit Formularen etc zu lösen? Ehrlich, ich sehe keinen Sinn im Aufwand, eine Input-Box aufzurufen, um dann den dort eingetragenen Wert 1:1 in eine Zelle zu kopieren - da kannst du ihn doch gleich dort reinschreiben??

Vielleicht erläuterst du ein wenig deine Zielsetzung - möglicherweise gibt es andere Lösungsansätze?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo @Klaus

zb. mit 1 bis 2 'for'-Schleifen:

Code: Alles auswählen

Sub nameneingeben

Dim sName As String
dim mySheet as Object
Dim oziel As Object

 sName=Inputbox("Bitte Vor- und Nachname eingeben", "Name eingeben")

oDoc = thisComponent
for s = 0 to 5  'Sp.A-F
for z = 0 to 6  'Zeile 1 bis 7
oziel = oDoc.Sheets(0).getCellByPosition(s,z)
oziel.string = sName
next z
next s

End Sub
Praktischerweise geht das auch gut über aufgezeichneten Code der Aktionen ->Bearbeiten ->Ausfüllen->...->...

Gruß Karo
cldi
*
Beiträge: 11
Registriert: Do, 09.11.2006 18:02

Beitrag von cldi »


Nun weiss ich ja nicht, welche Gesamtapplikation du endgültig vorhast, aber wäre nicht möglicherweise deine ganze Aktion direkt mit Formularen etc zu lösen? Ehrlich, ich sehe keinen Sinn im Aufwand, eine Input-Box aufzurufen, um dann den dort eingetragenen Wert 1:1 in eine Zelle zu kopieren - da kannst du ihn doch gleich dort reinschreiben??

Vielleicht erläuterst du ein wenig deine Zielsetzung - möglicherweise gibt es andere Lösungsansätze?
Erstmal Danke für deine Antwort.

Die Zielsetzung:
Ich muss immernoch eine Stundenabrechnung von Excel in Open Office umsetzen.

Im Excel war das mit den Namen eingeben eine von mir erstelle frm.
Es wird der Name nur einmal eingegeben (in Excel wurde das Makro auch durch einen Button aufgerufen) und auf alle anderen Datenblätter übertragen, da die Mitarbeiter immer vergessen haben ihre Sheets zu Personalisieren.
Eigentlich ist es schon unnötig (im nachinhein gedacht) es auf einen Umweg zu machen, aber bisher hat es dadurch jetzt auch kein Mitarbeiter vergessen einmalig seinen Namen hinzuschreiben...

Ich habe es mir ja jetzt eigentlich schon mit der Inputbox einfacher gemacht, bin aber auch gerne offen für neue Ideen.

Die bisherige würde auch funktionieren, von daher könnte man sie auch belassen

Schade, dass es mit dem automatischen Ausführen leider nicht so einfach ist, könnte es auch an einer anderen Stelle gebrauchen
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo
Schade, dass es mit dem automatischen Ausführen leider nicht so einfach ist, könnte es auch an einer anderen Stelle gebrauchen
Du könntest doch evtl im Makro zuerst prüfen, ob bestimmte Zellen gefüllt sind, und abhängig davon beenden oder durchlaufen lassen, und das ganze dann mit dem Ereigniss 'Dokument öffnen' verbinden. Wäre dann 'quasi-automagisch'.

Gruß Karo
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo karolus,
zb. mit 1 bis 2 'for'-Schleifen:
danke für den tipp; meine heimliche hoffnung zielte jedoch auf setContent ab.

beste grüße

klaus
cldi
*
Beiträge: 11
Registriert: Do, 09.11.2006 18:02

Beitrag von cldi »

Karolus hat geschrieben:

Code: Alles auswählen


Dim oZielzelle As Object

oDoc = thisComponent
oZielzelle = oDoc.sheets(0).getCellRangeByName("E6") 'Dein Bereich ist nicht größer!
oZielzelle.string = sName    'für Text
'oZielzelle.value =           'Verwendung bei Zahlenwerten
'oZielzelle.formula =        'um Formeln als solche zu definieren
@Karolus
Ich habe jetzt nach diesem Schema versucht bei einer anderen Baustelle von mir weiterzukommen:

Code: Alles auswählen


Dim oJahr as Object
Dim oMonat as Object
Dim sVersion as String
Dim oMName As Object
Dim oCalc As Object 
Dim sText As String


  oCalc = ThisComponent
   
   oMonat = oCalc.Sheets(1).getCellRangeByName("C1")  
   sVersion = "V1.0_OOo"	
   oJahr = oCalc.Sheets(1).getCellRangeByName("E1") 
   oMName = oCalc.Sheets(1).getCellRangeByName("F1") 

   oText = oMonat & oJahr & oMName & sVersion
Und genau an dieser Zeile hängt es:

oText = oMonat & oJahr & oMName & sVersion

Wenn ich Text als String deklariere, kommt die Fehlermeldung "Falscher Wert für Eigenschaft, obwohl es doch eigentlich ein String ergeben sollte.

Aber mit dem Objekt ist es leider auch nicht lösbar, da entweder die obige Fehlermeldung kommt oder irgendwas mit Objekt falsch belegt (bekomm die genaue Fehlermeldung leider nicht mehr hin ;) )

Welche Möglichkeiten habe ich den noch, die ausgelesenen Werte zu einem String hinzuzufügen?

Ein ganz dickes Danke schon im Voraus!!!
komm leider grad echt nicht weiter...
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

Code: Alles auswählen

oText = oMonat.string & oJahr.string & oMName.string & sVersion
oMonat, oJahr und oMName sind doch nur die Platzhalter der Zelladressen, und nicht ihr Inhalt.

Gruß Karo
cldi
*
Beiträge: 11
Registriert: Do, 09.11.2006 18:02

Beitrag von cldi »

*andenkopflang*

daran hab ich echt nicht mehr gedacht, sorry, hatte mich schon gewundert warum auch nichts ausgegeben wird mit print ...

danke und nochmals sorry
Antworten