Seite 1 von 1
Zellen von Sheet A nach Sheet B kopieren
Verfasst: So, 12.11.2006 22:58
von Sir_Duke
Hallo Leute
So nachdem ich nun das Forum vergeblich nach einem passenden Makro durchsucht habe versuche ich es nun so.
Ich habe eine Calc Datei mit mehreren Sheets. Im 1.Sheet sind meine Rohdaten abgespeichert.
Nun bräuchte ich ein Makro das mir Aus diesem Sheet bestimmte Werte kopiert und auf in ein anderes Sheet speichert.
Anschließend soll er eine bestimmte Anzahl von Zeilen weitergehen und von vorne beginnen.
Hab mal mit dem Recorder versucht es herauszubekomen aber irgendwie Blick ich in Basic nicht durch.
Hatte alles zwar schon in Excel laufen aber in OO bring ich es nicht hin.
Ich hoffe ihr könnt mir ein wenig weiterhelfen.
MFg
Sir_Duke
Verfasst: Mo, 13.11.2006 12:58
von Toxitom
Hey Sir_Duke,
Nun bräuchte ich ein Makro das mir Aus diesem Sheet bestimmte Werte kopiert und auf in ein anderes Sheet speichert.
Hmm, kanns ein bischen genauer sein? Wie heisst das "sheet", was für Werte (Zelladressen, Inhalte) und wohin (Tabellenname, Zelladressen etc).
Wie soll man dir sonst helfen können? etwa so:
Code: Alles auswählen
dim aDat()
oDoc = thisComponent
oBereich1 = oDoc.sheets(0).getCellRangeByName("A6:b14")
aDat = oBereich1.getDataArray()
oBereich2 = oDoc.sheets(1).getCellRangeByName("b6:c14")
oBereich2.setDataArray(aDat())
???
Gruss
Thomas
Verfasst: Mo, 13.11.2006 23:26
von Sir_Duke
Sorry Thomas das es so ungenau war. Ich dachte ich fasse es etwas allgemeiner damit mehr leute darauf zurück greifen können.
Aber nun konkret.
Es sollen Zellinhalte von Sheet(Tabellenblatt) "CSV" nach "DATEN" kopiert werden.
1) "CSV" Spalte: AL ; Zeile 673 ----> "DATEN" Spalte A ; Zeile 1017
2) "CSV" Spalte: AO; Zeile 675 ----> "DATEN" Spalte B ; Zeile 1017
3) "CSV" Spalte: AO; Zeile 676 ----> "DATEN" Spalte C ; Zeile 1017
Danach geht es immer um 4 Zeilen nach unten (Spalten bleiben gleich)
Also:
1) "CSV" Spalte: AL ; Zeile 677 ----> "DATEN" Spalte A ; Zeile 1018
2) "CSV" Spalte: AO; Zeile 679 ----> "DATEN" Spalte B ; Zeile 1018
3) "CSV" Spalte: AO; Zeile 680 ----> "DATEN" Spalte C ; Zeile 1018
Ich hoffe das die Angaben reichen.
Mfg
Erwin
Verfasst: Di, 14.11.2006 05:03
von Karolus
Hallo
Mit ein paar Mausklicks aus :
http://www.dannenhoefer.de/faqstarbasic/
zusammengetragen, und konkret auf deine Zielvorstellung modifiziert :
Code: Alles auswählen
Sub copyschleife
odoc = thisComponent
mySheet1 = oDoc.Sheets().getByName("CSV")
mySheet2 = oDoc.Sheets().getByName("DATEN")
m = 1017 'erste Zeilennr. Zielbereich
for n = 673 to 1050 step 4 'Zeilennr. Quellbereich (von,bis,Schrittweite)
oQuelleRange1=mySheet1.getCellRangeByName("AL" & n)
oQuelleRange2=mySheet1.getCellRangeByName("AO" & n+2)
oQuelleRange3=mySheet1.getCellRangeByName("AO" & n+3)
oZiel1 = mySheet2.getCellByPosition(0,m-1)
oZiel2 = mySheet2.getCellByPosition(1,m-1)
oZiel3 = mySheet2.getCellByPosition(2,m-1)
oQuellRangeAddresse = oQuelleRange1.getRangeAddress
oZielCellAdresse=oZiel1.getCellAddress
mySheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
oQuellRangeAddresse = oQuelleRange2.getRangeAddress
oZielCellAdresse=oZiel2.getCellAddress
mySheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
oQuellRangeAddresse = oQuelleRange3.getRangeAddress
oZielCellAdresse=oZiel3.getCellAddress
mySheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
m = m+1
next n
End Sub
Das gleiche Ergebnis erhälst du mit der Funktion (in DATEN.A1018):
=INDIREKT("CSV.AL"&ZEILE(A1)*4+673)
für Spalte B und C anpassen und alles zusammen nach unten ausfüllen.
Gruß Karo
Verfasst: Fr, 17.11.2006 09:32
von Sir_Duke
Hallo Karo
danke für deinen Tipp mit der Formel, hat super funktioniert.
Ich dachte ich benötige hierfür ein Makro da EXCEL es auch nur mit konnte.
Verfasst: Fr, 17.11.2006 11:19
von Karolus
Hallo Sir Duke
Ich dachte ich benötige hierfür ein Makro da EXCEL es auch nur mit konnte
Excel kann das auch, die Formel lautet :
Gruß Karo
Verfasst: So, 03.12.2006 22:37
von jo_achim
Toxitom hat geschrieben:
Wie soll man dir sonst helfen können? etwa so:
Code: Alles auswählen
dim aDat()
oDoc = thisComponent
oBereich1 = oDoc.sheets(0).getCellRangeByName("A6:b14")
aDat = oBereich1.getDataArray()
oBereich2 = oDoc.sheets(1).getCellRangeByName("b6:c14")
oBereich2.setDataArray(aDat())
Hallo,
wo kann man diese Funktionen nachlesen? getCellRangeByName() finde ich im "Star Office Programmierhandbuch BASIC" unter
docs.sun.com/app/docs/coll/1274.1 Aber wo sind Funktionen wie getDataArray()?
Danke, jo
Verfasst: So, 03.12.2006 22:49
von Stephan
Verfasst: Mo, 04.12.2006 10:31
von jo_achim
Stephan hat geschrieben:in der IDL-Referenz:
Danke!