[gelöst] Zellen verknüpfen

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

Moderator: Moderatoren

elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

[gelöst] Zellen verknüpfen

Beitrag von elfvorn »

Hallo zusammen,

irgendwie komme ich nicht mehr weiter und wäre um Hilfe sehr dankbar.
Ich möchte Zellen aus verschiedenen Arbeitsblättern mit anderen Zellen verknüpfen. Mit dem Makro-Rekorder bekomme ich schon mal einen Code der funktioniert.

Code: Alles auswählen

sub Beisp_Verknuepfen
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$D$9"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Nr"
args3(0).Value = 5
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$F$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "A"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = true
args5(5).Name = "MoveMode"
args5(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
end sub
Nun möchte ich den Zellsprung variabel machen, d.h. aus der Zuweisung
args6(0).Value = "$D$9" der GotoCell-Prozedur

sollte etwas in der Art "args6(0).Value = x, y" werden, um dann x und y aus z. Bsp einer ForNext-Schleife zu übergeben

Hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Kann mir jemand helfen?

Grüße elfvorn
Zuletzt geändert von elfvorn am Fr, 10.08.2012 10:43, insgesamt 1-mal geändert.
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Zellen verknüpfen

Beitrag von theindless »

Hallo,

ich bin jetzt nicht der Fachmann, was programmieren angeht, aber meinem Verständnis nach enthalten For...next-Schleifen immer nur Zahlen.
gotoCell will aber offenbar den Namen der Zelle (also z.B. A1) und somit auch Buchstaben.

Das dürfte über for...next nicht machbar sein.

Prinzipiell wäre der Weg über den Index der Zelle (z.B. 0,0 für A1) möglich, wie in getcellbyposition(0,0).... aber das in deine aufgezeichneten Code einzubauen, fehlt mir die Erfahrung.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

Re: Zellen verknüpfen

Beitrag von elfvorn »

Halllo Theindless,

danke für die Antwort.
Ich denke, daß ist die Frage!
Wie bekomme ich aus Zellkoordinaten (Spalte,Zeile) in numerischer Form z.Bsp. (3,8), den Namen "$D$9", um den dann in einem UNO-Service wie GoToCell weiter zu verwenden?

Gruß
elfvorn
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zellen verknüpfen

Beitrag von Karolus »

Hallo
Deinen 40 Zeilen aufgezeichneter Code entspricht folgendes:

Code: Alles auswählen

sub formelschreiben
   doc = thiscomponent
   targetsheet = doc.sheets(4)
   targetsheet.getCellRangeByName("F4").Formula = "=andereTabelle.$D$9"
   'targetsheet.getCellByPosition( c, r ).Formula = "=andereTabelle.$D$9" 'alternativ per Spalten/Zeilen-index
end sub
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

Re: Zellen verknüpfen

Beitrag von elfvorn »

Hallo Karo,

Danke für die Antwort.
Habe Deinen Programmcode probiert und Schwierigkeiten, den Wert aus der Quellzelle zu übernehmen (Fehler vermutlich in der letzten Zeile)

Code: Alles auswählen

sub formelschreiben
   doc = thiscomponent
   targetsheet = doc.sheets(4)
   sourcesheet = doc.sheets (1)
   targetsheet.getCellRangeByName("F4").Formula = sourcesheet.getCellrangeByName("D9")
end sub 
Was ist falsch?

Gruß
elfvorn
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zellen verknüpfen

Beitrag von Karolus »

Hallo
Du musst eine Formel in die Zielzelle reinschreiben:

Code: Alles auswählen

sub formelschreiben
   doc = thiscomponent
   targetsheet = doc.sheets(4)
   sourcesheet = doc.sheets (1)
   targetsheet.getCellRangeByName("F4").Formula = "=" & sourcesheet.Name & ".D9"
end sub 
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

Re: Zellen verknüpfen

Beitrag von elfvorn »

Hallo,

Danke für die Antwort.
Ich möchte aber zwei Zellen verknüpfen. D.h. in der Zielzelle sollte dann "=$quelltabelle$D$9" stehen.

Grüße
elfvorn
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zellen verknüpfen

Beitrag von Karolus »

elfvorn hat geschrieben:Hallo,

Danke für die Antwort.
Ich möchte aber zwei Zellen verknüpfen. D.h. in der Zielzelle sollte dann "=$quelltabelle$D$9" stehen.

Grüße
elfvorn
Wärst du so freundlich die angebotene Lösung auszuprobieren ? - die $zeichen wirst du sicher auch selbst an den passenden Stellen einfügen können.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

Re: Zellen verknüpfen

Beitrag von elfvorn »

Guten morgen Karo,

Danke für die Antwort.
Ich hab die Lösung doch gestern abend noch probiert! Für die eine Zelle klappt das.
Aber ich will ja mehrere Zellen verknüpfen.
Ich habe den Programmcode entsprechend erweitert

Code: Alles auswählen

sub formelschreiben
   doc = thiscomponent
   targetsheet = doc.sheets(4)
   sourcesheet = doc.sheets (1)
   For n = 8 to 15
      sourcecell = sourcesheet.getCellRangeByPosition(n,3,n,3)
      targetsheet.getCellByPosition(4,n).Formula =  "=" & sourcesheet.Name & ".D9"
   Next
end sub
Im Targetsheet steht jetzt, wie erwartet, in acht Zellen dasselbe: "=Spielplan.D9"
So wie ich das sehe, brauche ich diesen Stringteil ".D9" dynamisch.

Morgendlichen Gruß von der Schwäbischen Alb
elfvorn
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zellen verknüpfen

Beitrag von Karolus »

Hallo
So wie ich das sehe, brauche ich diesen Stringteil ".D9" dynamisch.
Falls sich nur die Zeilennummer ändert kannst du die ja aus n berechnen lassen, falls nicht - steckst du die acht Zelladdressen in ein Array und nimmst sie nacheinander raus:

Code: Alles auswählen

sub formelschreiben
   doc = thiscomponent
   targetsheet = doc.sheets(4)
   sourcesheet = doc.sheets (1)
   sources() = array("D9", "E14", "A7", 'usw....  )
   For n = 8 to 15
      sourcecell = sourcesheet.getCellRangeByPosition(n,3,n,3)
      targetsheet.getCellByPosition( 4, n ).Formula =  "=" & sourcesheet.Name & "." & sources( n-8 )
   Next
end sub
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
elfvorn
*
Beiträge: 10
Registriert: Do, 08.12.2011 16:01

Re: Zellen verknüpfen

Beitrag von elfvorn »

Hallo Karo, hallo theindless,

Heureka ich hab's!

Es war tatsächlich nur die Zeilennummer, die nachgezogen werden mußte.
Vielen Dank an Euch zwei, speziell natürlich Karo (Viel Schlaf gab es letzte nacht nicht, wenn ich mir die Timestamps der Antworten so anschaue).

Wie kann ich den Thread jetzt als "gelöst" markieren?

Gruß
elfvorn
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Zellen verknüpfen

Beitrag von theindless »

Hallo,

einfach das Thema des 1. (!) Beitrages vorne mit [gelöst] oder so ergänzen...

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Antworten