Seite 1 von 1
Inputbox - Eingabe in eine bestimmte Zelle in Calc einfügen
Verfasst: Mo, 20.11.2006 21:42
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
Verfasst: Di, 21.11.2006 02:55
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
Verfasst: Di, 21.11.2006 11:30
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
Verfasst: Di, 21.11.2006 13:16
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
Verfasst: Di, 21.11.2006 16:01
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
Verfasst: Di, 21.11.2006 17:45
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
Verfasst: Di, 21.11.2006 17:49
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
Verfasst: Di, 21.11.2006 17:50
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
Verfasst: Di, 21.11.2006 18:18
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
Verfasst: Di, 21.11.2006 18:22
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
Verfasst: Di, 21.11.2006 19:19
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
Verfasst: Mi, 22.11.2006 08:25
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
Verfasst: Do, 23.11.2006 14:02
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...
Verfasst: Do, 23.11.2006 14:57
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
Verfasst: Do, 23.11.2006 15:06
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