Seite 1 von 1

[gelöst] Zellen verknüpfen

Verfasst: Do, 09.08.2012 17:21
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

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 20:46
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

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 20:57
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

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 21:34
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

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 22:32
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

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 23:20
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 

Re: Zellen verknüpfen

Verfasst: Do, 09.08.2012 23:30
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

Re: Zellen verknüpfen

Verfasst: Fr, 10.08.2012 06:01
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.

Re: Zellen verknüpfen

Verfasst: Fr, 10.08.2012 06:24
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

Re: Zellen verknüpfen

Verfasst: Fr, 10.08.2012 07:46
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

Re: Zellen verknüpfen

Verfasst: Fr, 10.08.2012 10:09
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

Re: Zellen verknüpfen

Verfasst: Fr, 10.08.2012 10:15
von theindless
Hallo,

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

theindless