Seite 1 von 1
Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Mo, 22.02.2010 15:47
von backin
Liebes Forum,
habe eine Liste mit verschiedenen Werten. Im oberen Bereich der Arbeitsmappe habe ich Felder (Zellen) unterschiedlich angeordnet, Nun möchte ich, dass die Werte aus der markierten Zeile (durch Klick auf eine Schaltfläche) in den oberen Zellen gefüllt werden.
Habt Ihr dazu eventuell eine Lösung?
Danke schon Mal im Voraus.
lg, Dieter
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Mo, 22.02.2010 15:54
von Karolus
Hallo
Habt Ihr dazu eventuell eine Lösung?
Ja evtl. haben wir da eine Lösung, falls du uns evtl. eine Bsplsdatei und eine präzisere Erklärung lieferst.
Gruß Karo
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 08:46
von backin
Hallo Karo,
gerne stelle ich Dir eine Musterdatei zur Verfügung.
Ich möchte nun z.B. auf die Zelle B22 oder B23 oder B24 klicken und dann sollen alle Werte aus dieser Zeile in die oberen grün markierten Zellen übertragen werden. Irgendwie müsste man die Zeilennummer herausfinden (Index) und dann die Zellen durchgehen.
Danke schön im Voraus.
Gruß, Dieter
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 10:23
von Karolus
Hallo
Ich häng mal das Beispielsdokument mit Makro und konfigurierter Schaltfläche an. ( das Makro ist dem Ereignis 'Fokuserhalt ..' der Schaltfläche zugewiesen )
Du solltest dir dazu
http://www.ooowiki.de/MakrosInstallieren und
http://www.ooowiki.de/MakrosMitEinemKlick
anschauen.
Der Makrocode:
Code: Alles auswählen
Sub sel_zeile_to_Formular
with thisComponent.currentselection.celladdress
isheet = .sheet
irow = .row
end with
with thiscomponent.sheets( isheet )
.getcellrangebyname("B3").string = .getcellbyposition(1,irow).string
.getcellrangebyname("B4").string = .getcellbyposition(2,irow).string
.getcellrangebyname("B5").string =_
.getcellbyposition(3,irow).string & " " & .getcellbyposition(4,irow).string
.getcellrangebyname("B6").string = .getcellbyposition(5,irow).string
.getcellrangebyname("B8").string = .getcellbyposition(6,irow).string
.getcellrangebyname("B9").formulalocal = .getcellbyposition(7,irow).string
.getcellrangebyname("B10").string = .getcellbyposition(8,irow).string
.getcellrangebyname("B11").formulalocal = .getcellbyposition(9,irow).string
end with
End Sub
Gruß Karo
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 10:55
von peterschleif
Hallo backin.
Du brauchst dazu einen Listener, der auf eine Änderung der Zell-Auswahl reagiert. Die Prozedur
AddListener() legt diesen Listener an. Du kannst sie zum Testen manuell ausführen und später automatisch beim Öffnen des Dokuments ausführen lassen. (Menü Extras | Anpassen -> Ereignisse -> "Dokument öffnen" -> Marko).
Der Listener ruft dann bei jeder neuen Auswahl die Prozedur
CurCtrl_selectionChanged(oEvent) auf. Dort wird geprüft, ob ...
- die neue Auswahl eine einzelne Zelle ist
- in Spalte B liegt
- unterhalb von Zeile 22 liegt.
Trifft das alles zu, werden die Daten aus der Zeile kopiert.
Peter
Code: Alles auswählen
Global oListener
Sub AddListener()
oListener = CreateUnoListener("CurCtrl_", "com.sun.star.view.XSelectionChangeListener")
ThisComponent.CurrentController.addSelectionChangeListener (oListener)
End Sub
Sub RemoveListener()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener (oListener)
End Sub
Sub CurCtrl_selectionChanged(oEvent)
Dim oCell As Object
Dim lRow As Long
oCell = oEvent.Source.Selection
If oCell.ImplementationName <> "ScCellObj" Then Exit Sub
lRow = oCell.RangeAddress.StartRow
If oCell.RangeAddress.StartColumn = 1 And lRow >= 21 Then 'Spalte B, ab Zeile 22
With oCell.spreadsheet
.getCellRangeByName("B3").String = .getCellByPosition(1, lRow).String
.getCellRangeByName("B4").String = .getCellByPosition(2, lRow).String
.getCellRangeByName("B5").String = .getCellByPosition(3, lRow).String & " " & .getCellByPosition(4, lRow).String
.getCellRangeByName("B6").String = .getCellByPosition(5, lRow).String
.getCellRangeByName("B8").String = .getCellByPosition(6, lRow).String
.getCellRangeByName("B9").FormulaLocal = .getCellByPosition(7, lRow).String
.getCellRangeByName("B10").String = .getCellByPosition(8, lRow).String
.getCellRangeByName("B11").FormulaLocal = .getCellByPosition(9, lRow).String
End With
End If
End Sub
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 16:08
von backin
Hallo Karo, hallo Peter,
herzlichen Dank für die Lösungen. Habe beide ausprobiert und es funktionieren beide einwandfrei.
Eine Anforderung habe ich noch, was ich bisher über komplizierte Formeln löse (leidet sehr unter Perfomance): in einer zweiten Arbeitsmappe habe ich drei Spalten (nicht zusammenhängend) die ich mit einem Wert (manuelle Eingabe) aus der ersten Arbeitsmappe durchsuchen möchte. Sobald der Wert innerhalb einer Spalte (zeilenweise suchen) gefunden wurde ("meyer" in "Ostermeyer") soll die gesamte Zeile in die erste Arbeitsmappe kopiert werden. Anschliessend soll weiter gesucht werden. Die Treffer sollen dann untereinander aufgelistet werden.
Ihr könnt Euch eine ungefähre Lösung unter
viewtopic.php?f=2&t=30024 ansehen.
Danke schön im Voraus.
Schöne Grüße, Dieter
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 18:21
von DPunch
Aloha
Etwas Ähnliches habe ich vor einiger Zeit mal zusammengebastelt, schau mal, ob Du das auf Deine Bedürfnisse anpassen kannst.
(in Quelle.ods sind ein paar zufällige Daten, die mir gerade unter die Finger gekommen sind, in Ziel.ods die Makros mit der Suchfunktion)
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 23.02.2010 20:30
von backin
Hallo DPunch,
habe mir Deine Lösung angeschaut. In Deinem Beispiel wird nach dem eingegebenen Suchwert in einer Spalte gesucht. Ich möchte in drei Spalten (z.B. A, E, H) nach einem Wert suchen (Teilstring).
Folgendes Beispiel:
Suchwert: ball
Nun soll in Spalte A *ball* gesucht werden. Wenn nicht vorhanden, soll in Spalte E *ball* gesucht werden. Wenn nicht vorhanden, soll in Spalte H *ball* gesucht werden. Und dann weiter mit der nächsten Zeile. Die Treffer sollen dann zusammen mit den restlichen in der Zeile vorhandenen Daten in eine andere Arbeitsmappe untereinander kopiert werden.
Herzlichen Dank im Voraus.
vG, Dieter
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Mi, 24.02.2010 00:38
von DPunch
Sei mir nicht böse, aber ein ganz kleines bisschen Eigeninitiative wäre wohl nicht verkehrt.
Das Beispiel gibt Dir alles in die Hand, was Du benötigst.
Wenn Du Dir die Lösung angeschaut hast, siehst Du ja auch, welches Ergebnis es hat, wenn in der Spalte nichts gefunden wurde - in dem Fall kannst Du in einer anderen Spalte suchen.
Helfen tu' ich gerne, aber jemandem das komplette Makro zu schreiben, das geht mir doch zu weit.
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Mi, 24.02.2010 11:27
von backin
Möchte auch nicht, dass Du mir das Makro schreibst. Das Suchen über Spalten ist mir klar. Ich möchte aber eher in einer Zeile drei Spalten durchgehen und dann zur nächsten Zeile wechseln und da weitersuchen. Da fehlt mir die Idee bzw. das Wissen, wie ich es angehen soll.
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 09.03.2010 09:04
von backin
Habe das Makro von DPunch an meine Anforderungen umgebaut. Funktioniert einwandfrei. Vielen Dank DPunch für Deine Hilfe.
Einen Punkt habe ich noch: wenn ich im Suchfeld das Suchwort eingebe und danach auf den Button "Suchen" klicke, sucht er nach einem Leerstring, da das Suchfeld nicht mit Return abgeschlossen wurde. Kann man über einen Befehl bewirken, dass wenn man auf den Button "Suchen" klicke, vor dem Suchen ein Return auf das Suchfeld gesetzt wird?
Danke im Voraus.
Re: Calc: nach Auswahl, Werte in Zellen füllen
Verfasst: Di, 09.03.2010 12:11
von DPunch
Aloha
Du musst halt irgendwas machen, was Dich aus dem Editier-Modus der Zelle rausbringt, bevor Du den Text darin auslesen willst.
Dafür könntest Du zum Beispiel kurz eine andere Zelle selektieren und dann zurück springen
Code: Alles auswählen
CurSelection = oDoc.CurrentController.getSelection
oTempCell = oSheet.getCellByPosition(1,1)
oDoc.CurrentController.Select(oTempCell)
oDoc.CurrentController.Select(CurSelection)
Das geht aber auch mit einem einfachen "Neu berechnen"
Gibt mit Sicherheit noch ein paar andere Möglichkeiten, das sind gerade die ersten, die mir so einfallen
